关于android:Fragment PopBackStack

Fragment PopBackStack

使用片段并将其弹出回来时,我遇到一个奇怪的问题。

我有一个片段活动:

第1步:我将一个名为Fragment A的Activity的onCreate附加到该Activity的onCreate中,如下所示:

这是片段活动的onCreate

1
2
3
4
5
6
7
8
9
@Override
    protected void onCreate(Bundle savedBundleState) {
        super.onCreate(savedBundleState);
        setContentView(R.layout.activity_base_new);

        Fragement_Home home = new Fragement_Home();
        FragmentManager manager = getSupportFragmentManager();
        manager.beginTransaction().add(R.id.frameContent, home).addToBackStack("home").commit();
    }

步骤:2之后,我将片段替换为以下代码:

1
2
3
Fragment_More moreFragment = new Fragment_More();
            FragmentManager manager = getSupportFragmentManager();
            manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack("more").commit();

第3步:此后,我再次以相同的方式在Fragment_More上添加了一个片段:

1
2
Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand();
            getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack("about_rockstand").commit();

这是我的片段在onBackPressedButton Lisetener上的活动:

1
2
3
4
5
6
7
8
9
10
11
@Override
public void onBackPressed() {
    FragmentManager fm = getSupportFragmentManager();
    Fragment f = fm.findFragmentById(R.id.frameContent);

 if(fm.getBackStackEntryCount() > 1){
         fm.popBackStack();
    } else{
        finish();
    }
}

这是我遇到的问题:

当我从步骤3中按回去时,如onBackPressed所述,它成功地给了我上一个片段,它将弹出backstack,并将我带到上一个片段。但是从Fragment_More中,当我再次按回时,它显示了空白的FRAGMENT内容。它从不显示我在活动的OnCreate的步骤1中添加的第一个片段。

请发表评论。我做错了什么?

谢谢


您不应该将第一个片段添加到Backstack中,因为按回车键只会撤消您所做的操作。因此,如果您替换一个片段并按回,它将使您所做的替换相反。但是,如果您按回" .add()" fragmenttransaction,它将简单地将其删除并显示空白页。因此,我认为从后堆栈中删除第一个片段应该可以解决问题。试试看,让我知道!

1
2
3
4
5
6
7
8
9
@Override
    protected void onCreate(Bundle savedBundleState) {
        super.onCreate(savedBundleState);
        setContentView(R.layout.activity_base_new);

        Fragement_Home home = new Fragement_Home();
        FragmentManager manager = getSupportFragmentManager();
        manager.beginTransaction().add(R.id.frameContent, home).commit();
    }

示例:

因此,假设您有两个称为A的片段


n


n