我知道有关刷新操作栏标题的问题已经得到解答。 但我的问题却与众不同。
我使用添加方法的片段而不是替换方法出于某些原因。因此,之前的片段不会被破坏,当返回时,之前的片段不会重新创建。
这是我的配置:
片段A标题" FragA" >片段B标题为" FragB"
当我从片段B回到片段A时,操作栏标题应为" FragA"但它留下了#34; FragB"。 问题是添加方法片段A没有重新创建,我没有找到要刷新它的事件。
我现在找到的唯一简单解决方案是:
1- fragB.OnResume:保存上一个操作栏标题
2- fragB.OnDestroyView:恢复上一个操作栏标题
使用这个解决方案,结果还可以,但我发现这个解决方案不是很干净。有没有更好的方法来使用添加方法和片段来刷新actionbartitle?
答案 0 :(得分:2)
您可以覆盖您的onBackPressed
活动,每次按下它,然后从 backstack 获取片段的名称,以了解哪个片段你目前在。
<强>样品:强>
@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"
}
}
现在要知道在将片段添加/替换到backstack时,需要将哪个片段放到片段中。还要确保调用addToBackStack
将片段放入后台堆栈。
FragmentTransaction.add(int containerViewId, Fragment fragment, String tag)
FragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)
答案 1 :(得分:0)
在onResume()回调中调用所有片段中的以下代码行。你不需要保存标题。
((YourFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);
它应该有帮助。
答案 2 :(得分:0)
在片段上放置一个名为tag的公共静态字符串,然后在标记所在的位置使用它。更具可维护性。
为什么 - 这意味着如果您想要更改标记,您只需在一个地方更改它,减少重构。 (它也用于添加,替换功能 - 如果困惑,请参阅Rod的答案)
我对解决方案的实现类似于Rod在他编辑的答案中解决问题的方法,除了少量代码。
@Override
public void onBackPressed() {
super.onBackPressed();
try {
if (getFragmentManager().findFragmentByTag(FragA.tag) != null) {
if (getFragmentManager().findFragmentByTag(FragA.tag).isVisible()) {
getActionBar().setTitle(R.string.FragA_title);
}
}
if (getFragmentManager().findFragmentByTag(FragB.tag) != null) {
if (getFragmentManager().findFragmentByTag(FragB.tag).isVisible()) {
getActionBar().setTitle(R.string.FragB_title);
}
}
}
catch (NullPointerException e) {
}
}
例如静态标签使用
FragmentTransaction.add(int containerViewId, Fragment fragment, FragA.tag)
答案 3 :(得分:-1)
@覆盖 public void onStop(){ super.onStop(); ((AppCompatActivity)getActivity())。getSupportActionBar()。setTitle(“Title”); } 覆盖当前片段中的onStop()方法,并给出前一个片段的标题名称。