Android:在更改方向后再次调用片段onCreateView方法

时间:2013-12-04 11:42:16

标签: android android-fragments

我实现了具有两种横向和纵向模式布局的应用程序。横向布局位于 layout-land 中。我有fragment1用于纵向布局,fragment2用于横向布局。我覆盖每个片段中的onCreateView

我有静态变量来知道当前片段。我在onCreateView中进行了分析(1代表片段1,2代表片段2)。

我的问题是当方向是横向模式时,静态值仍为1。

我调试了应用程序的方向。当我将方向肖像更改为横向时,先调用fragment2的onCreateView方法,然后再调用fragment1的onCreateView方法。静态值已被覆盖。

我不知道为什么调用fragment1后的onCreateView fragment2方法调用?我想为正确的片段分配正确的值。

抱歉我的英语不好。

感谢。

4 个答案:

答案 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{

        }
    }
}