我有多个片段。我想保存所有实例,直到再次按下“主页”按钮

发布于 2025-02-10 02:56:04 字数 1187 浏览 1 评论 0原文

我尝试了许多方法来保存实例,但是我很困惑如何将实例保存在背包中,因为没有人描述了如果有多个片段。

bottomNavigationView.setOnItemSelectedListener(item -> {
    switch (item.getItemId()){
            case R.id.home:
                loadFragment(new HomeFragment(),0);
                break;

        case R.id.create:

      loadFragment(new CreateFragment(),1);
            break;

        case R.id.profile:
            loadFragment(new ProfileFragment(),1);
            break;
    }
    return true;
});
    public void loadFragment(Fragment fragment,int flag){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        if(flag==0){
            fragmentTransaction.add(R.id.frame_layout,fragment);
            fragmentManager.popBackStack(ROOT_FRAGMENT_TAG,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                fragmentTransaction.addToBackStack(ROOT_FRAGMENT_TAG);
        }
        else {
            fragmentTransaction.replace(R.id.frame_layout,fragment);
            fragmentTransaction.addToBackStack(null);
        }
        fragmentTransaction.commit();
    }

I tried many methods to save instances but I am confused how to save instances in backstack because no one described how to use it if there multiple fragments.my code in mainactivity below:

bottomNavigationView.setOnItemSelectedListener(item -> {
    switch (item.getItemId()){
            case R.id.home:
                loadFragment(new HomeFragment(),0);
                break;

        case R.id.create:

      loadFragment(new CreateFragment(),1);
            break;

        case R.id.profile:
            loadFragment(new ProfileFragment(),1);
            break;
    }
    return true;
});
    public void loadFragment(Fragment fragment,int flag){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        if(flag==0){
            fragmentTransaction.add(R.id.frame_layout,fragment);
            fragmentManager.popBackStack(ROOT_FRAGMENT_TAG,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                fragmentTransaction.addToBackStack(ROOT_FRAGMENT_TAG);
        }
        else {
            fragmentTransaction.replace(R.id.frame_layout,fragment);
            fragmentTransaction.addToBackStack(null);
        }
        fragmentTransaction.commit();
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花落人断肠 2025-02-17 02:56:04

我建议您将片段班级班。

private static MyFragment fragment;


public static MyFragment getInstance() {
    if (fragment == null) {
        fragment = new MyFragment();
    }
    return fragment;
}

然后使用getInstance()方法来实例化片段

I suggest you to make your Fragment Classes Singleton.

private static MyFragment fragment;


public static MyFragment getInstance() {
    if (fragment == null) {
        fragment = new MyFragment();
    }
    return fragment;
}

then use getInstance() method to instantiate your fragment

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文