我知道关于刷新操作栏标题的问题已经得到解答。 但我的问题完全不同。
出于某些原因,我使用 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/