android - 添加 fragment 并更新操作栏标题

标签 android android-fragments android-actionbar

我知道关于刷新操作栏标题的问题已经得到解答。 但我的问题完全不同。

出于某些原因,我使用 add 方法而不是 replace 方法的 fragment 。所以之前的 fragment 不会被破坏,当返回时,之前的 fragment 不会重新创建。

这是我的配置:

标题为“FragA”的 fragment A > 标题为“FragB”的 fragment B

当我从 fragment B 回到 fragment A 时,操作栏标题应该是“FragA”,但它仍然是“FragB”。 问题是 add 方法 Fragment A 没有重新创建,我没有找到刷新它的事件。

我目前找到的唯一简单解决方案是:

1- fragB.OnResume : 保存之前的操作栏标题

2- fragB.OnDestroyView : 恢复之前的操作栏标题

有了这个解决方案,结果还可以,但是我发现这个解决方案不是很干净。有没有更好的方法来使用带有 fragment 的 add 方法来刷新 actionbartitle?

最佳答案

你可以覆盖你的onBackPressed你的 Activity ,每次你按下它你然后从backstack获取 fragment 的名称到知道您当前在哪个 fragment 。

示例:

  @Override
   public void onBackPressed() {
    super.onBackPressed();

    int framentCount = this.getFragmentManager().getBackStackEntryCount();
    if(framentCount != 0)
    {
        FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(framentCount-1);
        String str=backEntry.getName(); //the tag of the fragment
        if(str.equals("fragA"))
            //set the actionbar title to FragA
        else if(str.equals("fragB"))
            //set the actionbar title to FragB
    }

     FragA myFragA = (FragA)getFragmentManager().findFragmentByTag("MY_FRAGMENTA_A_TAG");
     if (myFragA.isVisible()) {
           //action bar.title="title first fragment"
     }
   }

现在要知道在将 fragment 添加/替换到后台堆栈时,您需要为 fragment 添加标签。还要确保调用 addToBackStack 将 fragment 放入后台堆栈。

FragmentTransaction.add(int containerViewId, Fragment fragment, String tag)
FragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

关于android - 添加 fragment 并更新操作栏标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25358666/

相关文章:

java - 具有更改操作栏操作的可标记 ListView

Android - 单击按钮时播放声音 - 空指针异常

android - 如何在方向/配置更改后维护 ListView fragment 状态?

java - RecyclerView 滚动时扩展项目之间的空间

android - 防止 Android 软键盘在 fragment 中向上移动 View ?

android - 弹出后堆栈后,我的 fragment 没有被垃圾收集

android - 在 Appcompat 21 中更改工具栏颜色

java - 如何在android中自定义导航?

android - 使用gradle构建android项目

android - 你如何防止 fragment webview 每次都重新加载?