Android保留Fragment在方向改变后不可见



我尝试减少我的视图层次结构,并使用android.R.id.content视图添加一个Fragment,它使用setRetainInstance(true)来保持其实例存活。

我的活动很简单

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate( final Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        // ensure that the view is available if we add the fragment
        findViewById( android.R.id.content ).post( new Runnable(){
            @Override
            public void run() {
                // add the fragment only once to manager
                if( savedInstanceState == null ) {
                    getSupportFragmentManager()
                        .beginTransaction()
                        .add( android.R.id.content, new LoginFragment() )
                        .commit();
                }
            }
        } );
    }
}

Fragment创建自己的视图,并使用onCreate()中的setRetainInstance(true)方法。我的问题是,在方向改变后,我的片段没有重新添加到活动和活动是空的。

savedInstanceState在你旋转屏幕后可能不是null,所以fragment没有添加到activity

虽然fragment本身不会被杀死,但是activity会被杀死,你必须再次将fragment添加到activity。

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentWithTag("TAG");
if(fragment == null){
    fragment = new LoginFragment();
}else{
    fm.beginTransaction()
        .add(android.R.id.content, fragment, "TAG")
        .commit();
}

顺便说一下,setRetainInstance(true)不是这样使用的。你应该允许片段被杀死和重新创建随着活动。

最新更新