【问题标题】:Compare fragments比较片段
【发布时间】:2013-11-14 22:00:10
【问题描述】:

我有下一个代码在容器 [Main, A, B, C] 中的 4 个片段之间切换。

无论用户如何浏览片段,我都需要返回按钮返回 [Main]。比如我去[Main] >> [A] >> [C]的时候按回应该去[Main]

但我没有得到想要的结果。我认为我在片段之间的 coparisson 方面做得不好。

Launcher MainFragment = new Launcher();

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment == MainFragment){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment == MainFragment && pFragment != MainFragment){
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
    currentFragment = pFragment;
}

更新--

我发现这种方式效果更好,但仍然存在问题。如果我浏览一些片段而不返回主片段,当我按下它时它不会返回。就像 popbackstack() 有问题一样。

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment.equals(MainFragment)){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment.equals(MainFragment) && !pFragment.equals(MainFragment)){
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
}

【问题讨论】:

  • 尝试在switchFragment中使用instanceOf代替==!=进行检查
  • 告诉我incompatible conditional operand types
  • 是否可以替代返回按钮?
  • @bofredo 我没有返回按钮。我正在开发一个板,该应用程序应该是对 android 股票的干扰。所以返回的唯一方法是使用我的自定义返回键

标签: android android-fragments back-stack


【解决方案1】:

可以通过从片段事务中删除 .addToBackStack 来实现此功能。

这里是片段中返回堆栈功能的 Android 参考:http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments

【讨论】:

  • 是的,我只设置了 .addToBackStack 以在 else if 条件下将 MainFragment 保存到 backstack。此条件查看当前片段是否为主片段,因此在这种情况下它保存到后台堆栈
  • 你在修改onBackPressed方法吗?
【解决方案2】:

我终于得到了想要的结果,只是在back_key onClickListener上替换了我想要的片段:

final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
        getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_container, MainFragment).commit();
    }
};

这样,如果将来我需要回到另一个片段而不是主片段,我只需添加一个条件来比较片段标签并根据标签做一些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多