我尝试减少我的视图层次结构,并使用android.R.id.content视图添加一个使用setRetainInstance(true)的Fragment来保持其实例的活动。
我的活动很简单
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)方法。 我的问题是,在更改方向后,我的片段不会重新添加到活动中,并且活动为空。
答案 0 :(得分:1)
savedInstanceState可能不为null,因此片段未添加到活动中。
虽然片段本身不会被杀死,但是活动会被杀死,你必须再次将片段重新添加到活动中。
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)并不意味着使用这种方式。您应该允许片段被杀死并与活动一起重新创建。