我实现了具有两种横向和纵向模式布局的应用程序。横向布局位于 layout-land 中。我有fragment1
用于纵向布局,fragment2
用于横向布局。我覆盖每个片段中的onCreateView
。
我有静态变量来知道当前片段。我在onCreateView
中进行了分析(1代表片段1,2代表片段2)。
我的问题是当方向是横向模式时,静态值仍为1。
我调试了应用程序的方向。当我将方向肖像更改为横向时,先调用fragment2的onCreateView
方法,然后再调用fragment1的onCreateView
方法。静态值已被覆盖。
我不知道为什么调用fragment1
后的onCreateView
fragment2
方法调用?我想为正确的片段分配正确的值。
抱歉我的英语不好。
感谢。
答案 0 :(得分:1)
您需要保存捆绑包,并且必须覆盖onsavedinstance方法,以便不会创建活动。
首次更改方向时,android会检查savedinstancestate并调用onSavedInstanceState方法(如果已实现)。
答案 1 :(得分:1)
你不需要保存东西! 只需让您的活动处理方向更改即可。 在AndroidManifest.xml中放这个
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize" >
</activity>
答案 2 :(得分:0)
在每个片段的onCreate里面你必须调用
getActivity().setRequestedOrientation(requestedOrientation)
答案 3 :(得分:0)
如果您的片段在横向和纵向中具有不同的“业务逻辑”,则应该有两个特殊的Fragment
实现。如果他们只有不同的布局,那么使用1 Fragment实现,并创建2个布局,每个方向一个。
在Fragments
中实例化并创建Activity.onCreate()
。但是不要将当前Fragment
保存在静态变量中。而是询问FragmentManager
是否已添加Fragment
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment myFragment = getSupportFragmentManager().findFragmentByTag("myTag");
if(myFragment == null){
//no Fragment has been added
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(new MyFragment1(), "myTag");
transaction.commit();
}else{
//the fragment has been added already, possibley before orientation change
//you could check its type and replace it
if(fragment instanceof MyFragment1){
}else if(fragment instanceof MyFragment2{
}
}
}