0

应用程序tabs通过选择每个tab我有以下代码来更新选项卡下方存在的片段屏幕。

public class MainActivity extends ActionBarActivity{
    Fragment f = null;
    TabFragment tf = null;
    List<Fragment> fragList = new ArrayList<Fragment>();
    int tabIndex;

    public void onTabSelected(Tab tab, FragmentTransaction ft) {        
        tabIndex = tab.getPosition();       

        if (fragList.size() > tab.getPosition())
            fragList.get(tab.getPosition());

        if (f == null) {
            tf = new TabFragment();
            Bundle data = new Bundle();
            data.putInt("index",  tabIndex);
            data.putString("extraString", "noreloading");
            tf.setArguments(data);
            fragList.add(tf);
        }
        else
            tf = (TabFragment) f;

        ft.replace(android.R.id.content, tf);       
    }

因此,我只使用每个选项卡更新一个片段类。
一切正常。我在backstack. 这就是我想要的。但是我actionbar通过选择该选项打开了一个菜单,我应该用新内容重新加载片段。所以我在mainactivity中做了以下操作。

    public void menuSelected(){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();

        // fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)  added clear backstack here no use.           

        tf = new TabFragment();
        Bundle data = new Bundle();
        data.putInt("index",  tabIndex);
        data.putString("extraString",  "reload");
        tf.setArguments(data);
        fragList.add(tf);
        ft.addToBackStack(null);
        ft.commit();

        ft.replace(android.R.id.content, tf);
    }
}

这里会发生什么,它会重新加载新数据,但是backstack当我按下后退按钮时,前一个片段存在。
所以我不想要任何片段backstack,我只想替换/重新加载片段内容。
有人可以建议如何解决这个问题吗?因为假设我们现在总共有两个片段,一个是前一个片段,另一个是重新加载的片段。现在如果我们再按另一个tab,然后再按一次菜单,现在总共有四个片段。

4

0 回答 0