【问题标题】:setTitle when Fragment is visible again当片段再次可见时设置标题
【发布时间】:2014-09-03 08:42:37
【问题描述】:

我有 FragmentA 和 FragmentB,但在 FragmentA 重新可见时设置我的 Activity 的标题时遇到问题。

流程

  1. FragmentA 可见(未添加到后台堆栈)
  2. 添加 FragmentB(添加到 backstack)
  3. 按下后退按钮,不是默认实现,但需要在片段中捕获它,但我这样做getActivity().getSupportFragmentManager().popBackStack();

现在当 FragmentA 重新可见时,必须再次更改 Activity 的标题 比如,FragmentA 标题 = “A”,FragmentB 标题 = “B”。但是当 FragmentA 重新可见时,标题仍然是“B”,因为在 FragmentA 中没有调用 onResume。在 FragmentA 中始终将标题设置为“A”的选项是可见的。

代码:

片段A

@Override
public void onResume() {
        super.onResume();
        getActivity().setTitle("POI's");       
}

片段B

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
        ...
        getActivity().setTitle("POI");
        ...
}

【问题讨论】:

  • 您可以在替换 Fragment 的同时更改 Title,而不是在这里更改 Title
  • @SilentKiller 您的评论没有描述当 FragmentB 按下后退按钮消失时如何将标题设置回来。
  • AFAIK,onResume() 应该总是在片段/活动变得可见时被调用。为什么要覆盖后退按钮功能?您是否可以尝试仅让测试保留默认的后退按钮功能?
  • @Francesco 您只需要在 onCreateView 更改标题以用于简历片段
  • @helleye 尝试使用默认的后退按钮行为,但没有成功。只有在调用 Activity 的 onResume 时才会调用 Fragment 的 onResume。但是没有调用 Activity 的 onResume,因为我没有离开 Activity。

标签: android android-fragments


【解决方案1】:

我在一个 Activity 上测试了两个片段,效果很好。请参阅下面的代码。

Fragment A:显示应用名称

@Override
public void onResume() {
    super.onResume();
    getActivity().setTitle(R.string.app_name);
}

Fragment B:显示应用名称

@Override
public void onResume() {
    super.onResume();
    getActivity().setTitle("fragment B");
}

片段 A 到 B 交易代码:

getActivity().getSupportFragmentManager().beginTransaction()
            .replace(R.id.container,new FragmentB())
            .addToBackStack(null)
            .commit();

更新: 需要替换像“replace(R.id.container,new FragmentB())”这样的片段,而不是将其添加到 FragmentManager 以更改活动的标题。

【讨论】:

  • 我添加了它。请检查。
  • 我想这就是问题所在。我正在使用添加而不是替换。我试试看
  • yapp .. 我尝试通过“添加”。它显示了您遇到的相同问题。
  • 是的,感谢您的回答。我将使用替换。更新您需要替换才能使其工作的答案(对于其他人)。
【解决方案2】:

尝试这样做

getActivity().getActionBar().setDisplayShowTitleEnabled(true);

getActivity().getActionBar().setTitle("your title");

【讨论】:

  • onResume 不再被调用,所以这没有区别。
  • 它应该被调用,因为它是片段生命周期的一部分。据我所知,它总是会被调用
  • 否,仅在使用replace(FragmentTransaction)时调用,不使用FragmentTransaction的add方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多