управление запрашиваемой ориентацией внутри TabChildActivity - PullRequest
1 голос
/ 27 января 2012

У меня есть 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?

...