繁体   English   中英

如何在Android中从BackStack加载片段

[英]How to Load fragment from BackStack in android

我在一个片段中有4个按钮。 当我单击一个按钮“ A”时,将加载一个片段。 当单击按钮“ B”时,将加载另一个片段,依此类推。 我的问题是当我再次单击按钮时,正在加载新片段。 我想从backStack加载前一个片段。

    if(rootView.findViewById(R.id.talk_main_container)!=null){
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            Bundle bundle=new Bundle();
            bundle.putString("cityid", cityId);
            if(position == 1){
                MainForumsFragment mTalkNewFragment = new MainForumsFragment(); 
                mTalkNewFragment.setArguments(bundle);
                transaction.replace(R.id.talk_main_container, mTalkNewFragment);  
            }
            if(position == 2){
                TalkNewFragment mTalkNewFragment = new TalkNewFragment();  
                mTalkNewFragment.setArguments(bundle);
                transaction.replace(R.id.talk_main_container, mTalkNewFragment);  
            }
            if(position == 3){
                TalkNewFragment mTalkNewFragment = new TalkNewFragment();  
                mTalkNewFragment.setArguments(bundle);
                transaction.replace(R.id.talk_main_container, mTalkNewFragment);  
            }
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            transaction.addToBackStack(null);
            transaction.commit();  
        }

那么我该如何实现呢?

不要将任何片段添加到堆栈

删除 transaction.addToBackStack(null);

你应该用

FragmentTransaction.replace(int containerId, Fragment fragment, String tag)

然后,您可以将片段取回:

getFragmentManager.findFragmentByTag(String tag)

将Fragments添加到Backstack时,添加特定的字符串标签,而不是addBackStack(null)

您可以使用popBackStack(tag,0)popBackstackImmediate()从后堆栈弹出片段。 这将弹出所有片段,直到找到具有指定标签的片段。

执行此操作时,请务必注意生命周期事件的顺序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM