【问题标题】:Going back to the previous Fragment回到上一个片段
【发布时间】:2014-05-21 23:30:06
【问题描述】:

我有一个程序,当一个用户点击一个按钮时,它会将他们从一个片段带到另一个片段。问题是我希望前一个片段在单击后退按钮后重新出现。代码如下:

这是创建第一个片段:

getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).addToBackStack(null).commit();

这是切换到第二个片段:

setContentView(R.layout.mixed_team_holder);
    FragmentManager fragMan = getFragmentManager();
    FragmentTransaction fragTrans = fragMan.beginTransaction();
    fragTrans.add(R.id.team_1,team1);
    fragTrans.add(R.id.team_2, team2);
    fragTrans.commit();

现在的问题是,当我点击后退按钮时,会出现一个空白页面(我假设是 (R.id.team_fragment_holder)。任何想法让第一个片段连同其上的所有信息一起重新出现?

注意:所有片段都扩展了 listfragment。

提前致谢。

【问题讨论】:

    标签: android android-fragments fragment android-listfragment back-stack


    【解决方案1】:

    您的初始片段事务不应该被添加到后台堆栈,第二个应该。按下返回时看到的空白页是删除teamFragment 的结果,因为它在后台堆栈上。

    getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).commit();
    

    FragmentManager fragMan = getFragmentManager();
    FragmentTransaction fragTrans = fragMan.beginTransaction();
    fragTrans.add(R.id.team_1,team1);
    fragTrans.add(R.id.team_2, team2);
    fragTrans.addToBackStack(null);
    fragTrans.commit();
    

    【讨论】:

    • 感谢您的回复,但没有成功。单击后退按钮后,我仍然得到一个空白页。我是否必须在创建下一个片段之前保存上一个片段中的所有内容并在按下后退按钮后重新加载它?
    • 或者可能是因为我设置了一个新的布局来显示 team1 和 team2 片段而导致空白屏幕?
    • 这可能是因为你设置了一个新的布局。您不必像那样重新设置布局。它可以/应该全部用 Fragments 以编程方式处理。
    【解决方案2】:

    您需要将片段添加到 Back Stack。

    FragmentManager fragMan = getFragmentManager();
    FragmentTransaction fragTrans = fragMan.beginTransaction();
    fragTrans.add(R.id.team_1,team1);
    fragTrans.add(R.id.team_2, team2);
    fragTrans.addToBackStack(null);//Here add the fragment
    fragTrans.commit();
    

    您需要验证后退按钮。

    @Override
    public void onBackPressed() {
        if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
            super.onBackPressed();
         } else {
            getSupportFragmentManager().popBackStack();
         }
    }
    

    【讨论】:

    • Activity 已经为您处理弹出片段回栈。无需重写 onBackPressed()。
    • 与第一个答案相同的问题:按下后退按钮后显示空白页。只是想知道我是否需要在调用第二个片段之前将所有内容保存在第一个片段上,然后再重新加载。谢谢!
    【解决方案3】:
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.fragment_button_project_location_ok:
    
            //getActivity().finish();
            //add back to previous screen
            getFragmentManager().popBackStack();
            break;
    
        default:
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多