Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android片段事务-替换片段会使旧片段保持奇怪的状态_Android_Fragment_Orientation Changes - Fatal编程技术网

Android片段事务-替换片段会使旧片段保持奇怪的状态

Android片段事务-替换片段会使旧片段保持奇怪的状态,android,fragment,orientation-changes,Android,Fragment,Orientation Changes,我有奇怪的行为。每次我在活动中替换相同类型的片段(使用事务),新的片段实例就会添加到片段列表中。旧实例在Fragment Manager中保持活动状态,并且在屏幕上显示方向更改后(尽管不可单击) 我的活动布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_pare

我有奇怪的行为。每次我在活动中替换相同类型的片段(使用事务),新的片段实例就会添加到片段列表中。旧实例在Fragment Manager中保持活动状态,并且在屏幕上显示方向更改后(尽管不可单击)

我的活动布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

-->


更改片段的我的代码:

@Override
public void onNavigationDrawerItemSelected(int position) {
    mCurrentDrawerPosition = position;
    // update the main content by replacing fragments


    List<Fragment> fragmemts = getSupportFragmentManager().getFragments();

    switch (position) {
    case 0:{
        if ( getMyApplication().getGroupModel().getUsersCount() > 0  ) {
            final Fragment fragment = UserSelectionFragment.newInstance();

            final FragmentManager fragmentManager = getSupportFragmentManager();
            //fragmentManager.popBackStack();
            final FragmentTransaction tr = fragmentManager
                    .beginTransaction();

            tr.replace(R.id.container, fragment);
            tr.addToBackStack(null);
            tr.setCustomAnimations(R.anim.abc_fade_in, R.anim.abc_fade_out);
            tr.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            tr.commit();

        } else {
            final Fragment fragment = MomentsFragment.newInstance(mUsername);

            final FragmentManager fragmentManager = getSupportFragmentManager();
            //fragmentManager.popBackStack();

            final FragmentTransaction tr = fragmentManager
                    .beginTransaction();
            tr.replace(R.id.container, fragment);
            //tr.setCustomAnimations(R.anim.abc_fade_in, R.anim.abc_fade_out);
            tr.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            tr.addToBackStack(null);

            tr.commit();
        }





        break;
    }

    case 1: {
        final Fragment fragment = DownloadFragment.newInstance();
        final FragmentManager fragmentManager = getSupportFragmentManager();
        //fragmentManager.popBackStack();
        final FragmentTransaction tr = fragmentManager
                .beginTransaction();
        tr.replace(R.id.container, fragment);
        tr.addToBackStack(null);

        tr.commit();
        break;
    }

    /*case 2:
        fragment = UserSelectionFragment.newInstance();
        break;*/

    }


}
@覆盖
已选择NavigationDrawerItems上的公共无效(整数位置){
mCurrentDrawerPosition=位置;
//通过替换片段更新主要内容
List fragmemts=getSupportFragmentManager().getFragments();
开关(位置){
案例0:{
如果(getMyApplication().getGroupModel().GetUserScont()>0){
final Fragment Fragment=UserSelectionFragment.newInstance();
final FragmentManager FragmentManager=getSupportFragmentManager();
//fragmentManager.popBackStack();
最终碎片事务tr=碎片管理器
.beginTransaction();
tr.replace(R.id.container,fragment);
tr.addToBackStack(null);
tr.setCustomAnimations(R.anim.abc\u淡入,R.anim.abc\u淡出);
tr.setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN);
tr.commit();
}否则{
最终片段=MomentsFragment.newInstance(mUsername);
final FragmentManager FragmentManager=getSupportFragmentManager();
//fragmentManager.popBackStack();
最终碎片事务tr=碎片管理器
.beginTransaction();
tr.replace(R.id.container,fragment);
//tr.setCustomAnimations(R.anim.abc\u淡入,R.anim.abc\u淡出);
tr.setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN);
tr.addToBackStack(null);
tr.commit();
}
打破
}
案例1:{
final Fragment=DownloadFragment.newInstance();
final FragmentManager FragmentManager=getSupportFragmentManager();
//fragmentManager.popBackStack();
最终碎片事务tr=碎片管理器
.beginTransaction();
tr.replace(R.id.container,fragment);
tr.addToBackStack(null);
tr.commit();
打破
}
/*案例2:
fragment=UserSelectionFragment.newInstance();
中断*/
}
}

多次方向更改后,UserSelectionFragment显示不正确,UserSelectionFragment的旧实例仍保留在片段列表中,但其视图对象为空

有什么问题吗?

尝试删除

 tr.addToBackStack(null);

对我来说,这会将你的碎片添加到背景中,这就是为什么它们会被保存在你的碎片列表中。他们的视图为空,因为他们在进入后台之前已被销毁。

你发现了吗?
 tr.addToBackStack(null);