假设我在片段A,然后移动到B,然后使用后退按钮返回到A. 在活动我执行以下控制装置:OnBackPress片段中显示未能更新
@Override
public void onBackPressed(){
FragmentManager fm = getSupportFragmentManager();
Fragment frag = fm.findFragmentByTag(Consts.A);
if (frag != null){
Log.d(Consts.TAGS.ACTIVITY_ORDER,"");
fm.beginTransaction().remove(frag).commit();
fm.popBackStack();
}
}
和同时显示出乙是这样的:
FragmentManager fm = getActivity().getSupportFragmentManager();
Fragment f = BFragment.newInstance(Consts.B);
fm.beginTransaction()
.replace(R.id.rl_content,
f,
Consts.B)
.addToBackStack(null)
.commit();
现在,该方法(如果有的话)将在一旦我们执行popBackStack()
执行,? 如果没有,我们如何能够在按下后立即更改A的数据模型或UI组件(例如键盘或TextView
)?它是否依赖于组件?
R.id.rl_content
是容器。 请考虑两种情况: 1.在R.id.rl
和被替换 2.不R.id.rl
并没有被替换
+1,因为在大多数情况下,这些解决方案将可能工作(考虑到f将是最后一次) ,但在某些(显示/隐藏软键盘,权限拒绝等)这些将无法正常工作,我们回到原点。 – lionheart
非常有效的一点,我会假设你会用相同的逻辑来解决这个问题,以便自己克服这些问题,例如onfocuschange监听器等等 – BIW
我接受这个答案,因为我确实在各种情况下使用了链接,尤其是(fm.getBackStackEntryCount()> 0)条件。 – lionheart