У меня есть TabActivity, в котором размещено несколько Активов.Внутри 1 Activity я должен установить ориентацию на landscape
(Camera Activity, которая работает в портретном режиме на Android 2.1).Если я позвоню setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
внутри моего Ребенка, похоже, ничего не произойдет.Я подумал, что мог бы попытаться установить ориентацию Activity через Parent (TabActivity) следующим образом:
//DefaultGroup is an FragmentActivity
public class ChildActivity extends DefaultGroup{
TabActivity mParent;
int previosOrientation;
public void onResume(){
super.onResume();
if (getParent() instanceof TabActivity){
mParent = (TabActivity)getParent();
previosOrientation = mParent.getRequestedOrientation();
mParent.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
//request to DefaultGroup to set CameraFragment as ContentView
// 0=id, null= Bundle, false=addToBackStack
startFragment(0, null, false);
}
public void onPause(){
super.onPause();
if (mParent != null){
mParent.setRequestedOrientation(previosOrientation);
}
}
@Override
public DefaultFragment getFragment(int fragment, Bundle args) {
return new CameraFragment();
}
}
, которая хорошо работает, если Activity создается.После того, как я нажимаю на другую кнопку Tab, ориентация возвращается к тому, что было раньше.Но если я возвращаюсь на эту вкладку, я получаю forceClose, содержащее эту LogCat-Stacktrace:
01-27 16: 19: 21.101: E / AndroidRuntime (30134): java.lang.RuntimeException: Unableдля возобновления активности {de.my.namespace.ChildActivity}: java.lang.IllegalStateException: не удается выполнить это действие после onSaveInstanceState 01-27 16: 19: 21.101: E / AndroidRuntime (30134): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.app.LocalActivityManager.moveToState (LocalActivityManager.java:178) 01-27 16: 19: 21.101: E / AndroidRuntime(30134): в android.app.LocalActivityManager.startActivity (LocalActivityManager.java:329) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): в android.widget.TabHost $ IntentContentStrategy.getContentView (TabHost.java:682) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.widget.TabHost.setCurrentTab (TabHost.java:346) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): наandroid.widget.TabHost $ 2.НаTabSelectionChanged (TabHost.java:150) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): at android.widget.TabWidget $ TabClickListener.onClick (TabWidget.java:540) 01-27 16: 19: 21.101:E / AndroidRuntime (30134): на android.view.View.performClick (View.java:3511) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.view.View $ PerformClick.run (Просмотреть.java: 14105) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.os.Handler.handleCallback (Handler.java:605) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.os.Handler.dispatchMessage (Handler.java:92) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.os.Looper.loop (Looper.java:137) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.app.ActivityThread.main (ActivityThread.java:4424) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на java.lang.refle.Method.invokeNative (собственный метод) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): в java.lang.reflect.Method.invoke (Method.java:511) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 551) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): at dalvik.system.NativeStart.main (собственный метод) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): вызвано:java.lang.IllegalStateException: невозможно выполнить это действие после onSaveInstanceState 01-27 16: 19: 21.101: E / AndroidRuntime (30134): at android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1242) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): в android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1253) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): вandroid.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:535) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.support.v4.app.BackStackRecord.commit (BackStackRecord.java: 519) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): по адресу de.my.namespace.activity.DefaultGroup.addFragment (DefaultGroup.java:162) 01-27 16: 19: 21.101: E / AndroidRuntime (30134): в de.my.namespace.activity.DefaultGroup.startFragment (DefaultGroup.java:145) 01-2716: 19: 21.101: E / AndroidRuntime (30134): at de.my.namespace.activity.ChildaActivity.onResume (AugmentedRealityActivity.java:26)01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1154)
01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.app.Activity.performResume (Activity.java:4539)
01-27 16: 19: 21.101: E / AndroidRuntime (30134): на android.app.ActivityThread.performResumeActivity (ActivityThread.java:2434)
01-27 16: 19: 21.101: E / AndroidRuntime (30134): ... еще 17
такой вопрос, по сути, мой: как я могу принудительно настроить ориентацию моего Child / TabActivity внутри одного особого потомка, когда возвращаю эти настройки обратно, если я оставлю этого особенного Child?