1

我在一个片段中有 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();  
        }

那么我该如何实现呢?

4

3 回答 3

1

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

删除 transaction.addToBackStack(null);

于 2014-12-19T05:06:23.027 回答
0

你应该使用

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

然后你可以取回片段:

getFragmentManager.findFragmentByTag(String tag)
于 2014-12-19T04:16:58.103 回答
0

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

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

确保在执行此操作时注意生命周期事件的顺序

于 2014-12-19T04:30:05.763 回答