获取以前的片段android

时间:2014-02-01 13:14:59

标签: android android-fragments android-fragmentactivity

我有一个布局,我一直在交换我的两个碎片 MainFragment和SecondFragment 我有一个活动级别按钮,其onclick我在布局中交换这些片段。

但是每次从FragB切换回来时我都需要保留相同的FragA实例。 下面是我使用的代码但应用程序崩溃时出现NullPointerError。

// When journey button menu is clicked [INSIDE THE MAIN ACTIVITY]
    OnClickListener journeyBtnClick = new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if(currentType==0){
                InitThisFragment(1);
            }else{
                InitThisFragment(0);
            }
        }
    };

    private int currentType=0;
    public void InitThisFragment(int type){
        if(type==0){
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    //get the previously added MainFragment from the BackStack
            Fragment mainFragment= getSupportFragmentManager().findFragmentByTag("main");
            transaction.replace(R.id.abs_fragment_container,mainFragment);
            transaction.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
            transaction.commit();
        }else{
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.abs_fragment_container, new SecondFragment());
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            transaction.commit();
        }
        currentType=type;

    }

在此之前,我在Activity类的OnCreate()中初始化MainFragment;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


  FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.abs_fragment_container, new MainFragment());
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); //add MainFragment in the BackStack
            transaction.addToBackStack("main");
            transaction.commit();
}

我是用户点击按钮

  • 启动第二部分的新片段[没有历史 上一篇片段]
  • 返回MainFragment [处于离开状态时的状态 它]

请帮忙! 提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果我已经理解你想做什么,如果你在secondFragment中,你可以调用“FragmentManager.popBackStack()”。

所以:

public void InitThisFragment(int type){
    if(type==0){
        getFragmentManager().popBackStack();
    }else{
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.abs_fragment_container, new SecondFragment());
        transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        transaction.commit();
    }
    currentType=type;

}

答案 1 :(得分:0)

将“main”标记放在替换方法中。

transaction.replace(R.id.abs_fragment_container, new MainFragment(),"main");
对于addToBackStack和replace方法,

tag参数的工作方式不同。根据android for tag参数:

addToBackStack:此后备堆栈状态的可选名称,或null。

replace:片段的可选标记名称,以便稍后使用FragmentManager.findFragmentByTag(String).检索片段