【问题标题】:Get previous fragment android获取上一个片段android
【发布时间】:2014-02-01 13:14:59
【问题描述】:

我有一个布局,我一直在交换我的两个片段 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();
}

用户点击按钮

  • 启动SecondFragment的新Fragment [No History of the SecondFragment 上一个片段]
  • 返回 MainFragment [与离开时相同的状态 它]

请帮忙! 提前致谢。

【问题讨论】:

    标签: android android-fragments android-fragmentactivity


    【解决方案1】:

    如果我理解了你想要做什么,如果你在 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;
    
    }
    

    【讨论】:

    • 小问题;我的应用程序 min sdk 是 8。所以出现错误!
    • 所以使用 getSupportFragmentManager().popBackStack();
    【解决方案2】:

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

    transaction.replace(R.id.abs_fragment_container, new MainFragment(),"main");
    

    tag 参数对于 addToBackStack 和 replace 方法的工作方式不同。根据android for tag参数:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 2014-07-09
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多