Java 控件请求TabChildActivity内部的定向
我有一个TabActivity,它主持了几个活动。在1活动中,我必须将方向设置为Java 控件请求TabChildActivity内部的定向,java,android,exception,orientation,android-fragments,Java,Android,Exception,Orientation,Android Fragments,我有一个TabActivity,它主持了几个活动。在1活动中,我必须将方向设置为横向(在Android 2.1上,这是一个在纵向模式下无法工作的摄像头活动)。如果我调用setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向)
横向
(在Android 2.1上,这是一个在纵向模式下无法工作的摄像头活动)。如果我调用setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向)在我的孩子身上,似乎什么都没发生。我想我可以尝试通过它的父级(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();
}
}
如果创建了活动,则该方法效果良好。单击另一个选项卡按钮后,方向将设置回以前的方向。但如果我回到那个选项卡,我会得到一个forceClose,其中包含这个LogCat Stacktrace:
01-27 16:19:21.101:E/AndroidRuntime(30134):java.lang.RuntimeException:无法恢复活动{de.my.namespace.ChildActivity}:java.lang.IllegalStateException:无法在onSaveInstanceState之后执行此操作
01-27 16:19:21.101:E/AndroidRuntime(30134):在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.onTabSelectionChanged(TabHost.java:150)
01-27 16:19:21.101:E/AndroidRuntime(30134):在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(view.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.reflect.Method.Invokenactive(本机方法)
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):在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):在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.committernel(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-27 16:19:21.101:E/AndroidRuntime(30134):在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个
因此,我的问题是:如果我离开一个特殊的孩子,我如何在设置这些设置的同时,在一个特殊的孩子体内强制我的孩子/选项卡活动的方向