在Android项目中,我有3个片段,我在用户操作过程中浏览它们。
FragmentA - > FragmentB - > FragmentC
当用户完成操作时,我执行popBackStack
返回FragmentA
if(getFragmentManager()!=null)
if(getFragmentManager().getBackStackEntryCount()>0) {
getFragmentManager().popBackStack(getFragmentManager()
.getBackStackEntryAt(0)
.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
我有EditText
,用户在其中写了一些文字,在调用popBackStack()
之后,片段会显示文字仍然存在。
有没有办法知道该片段已被弹出并重置为EditText
?
这是我用来进入下一个屏幕的地方:
try {
String backStateName = ((Object) fragment).getClass().getName();
String fragmentTag = backStateName;
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_NONE);
if (addToBackStack)
ft.addToBackStack(backStateName);
ft.commit();
} catch (Exception e) {
Logging.logException(e);
}
答案 0 :(得分:0)
这可以使用标志轻松完成。
我们的想法是,当调用popBackStack()
时,活动会设置一个标志,FragmentA将在其onResume()
中对其进行检查。
简化步骤:
弹出FragmentC时,请执行以下操作:
clearEditTextOfA = true;
onResume()
中执行此操作:
if (activityCallback.shouldClearEditText()) {
editText.setText("");
}
activityCallback
是一个接口,它允许片段与其所在的活动进行通信。请参阅Android Docs。
不是ft.add()
,而是ft.replace()
。
这会使你的片段的onResume()
在他们改变时被调用。