我正在使用一个活动与tabpager和附加片段的tabactivity。当我想移动fragmentB时,用当前fragmentA替换fragmentB。我需要在FragmentB刷新片段中找到onbackpress的解决方案而不用改变Backstack因为我使用了近十个片段一个标签。
片段生命周期中是否有任何方法
答案 0 :(得分:0)
查看寻呼机并不总是在内存中保存它的片段,因此您必须处理两种情况: 1 - 重新创建片段 - 只需从您持有它们的任何地方读取数据并以常规方式显示。 2 - 片段是从外部修改的,但仍然由ViewPager持有,据我所知,这是你所关心的。 你可以做的是创建这个listener,然后通知片段它再次显示,并可能重新加载它的数据。
在不同应用程序组件之间进行通信的更复杂的答案是使用某些事件总线,如Otto。
答案 1 :(得分:0)
当片段B在片段A上时,片段A是onPause()。反压后,片段A是onResume()。因此,您可以创建一个布尔值来观察此更改。
在片段A中
private boolean isBackFromB;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isBackFromB=false;
}
@Override
public void onPause() {
super.onPause();
isBackFromB = true;
}
@Override
public void onResume() {
super.onResume();
updateUI();
if (isBackFromB) //Do something
}
答案 2 :(得分:-1)
覆盖onBackPressed()
中的Activity
方法,在backstack中添加所有fragment
。
@Override
public void onBackPressed() {
FragmentManager manager =getFragmentManager();
int count = manager.getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
} else {
manager.popBackStack();
}
}