我有两个 fragment :F1 和 F2
F1 包含:
- 一个用户可以填写的EditText
- “下一步”按钮转到 F2
当用户按下“下一步”时,将显示 F2 并将 F1 添加到后台堆栈。因此,当用户按下 F2 时,它会返回到 F1。
当用户返回到 F1 时,我想重置 EditText 中的值。因为我只想在重新创建 View 时重新初始化值,所以我在 onViewCreated
而不是 onResume
中重置了值。
我遇到的问题是,当用户尝试将 Fragment 恢复到之前的状态时,系统会自动填充 EditText。
该值会自动从 saveInstanceState
包中重新填充到 onViewStateRestored
中。
所以我的问题是:覆盖 onViewStateRestored
方法以将 null 包发送到 super(见下文)是否是个好主意,因为它解决了我的问题?
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(null);
}
最佳答案
So my question is: is it a good idea to override the onViewStateRestored method to send a null bundle to super (see below), as it solves my issue?
答案很可能是否定的。这种“小”黑客攻击通常会在未来导致巨大的 WTF 和长时间的调试 session 。
例如,如果我没记错的话,这个 hack 将立即导致配置更改和保存与恢复流程上下文中的错误。由于在这两个流程中 fragment 的 View
都将被重新创建,因此您将丢失用户的输入。
很可能,这不是您想要的行为。
我在评论中阅读了您的讨论,但仍然无法理解您为什么坚持在重新创建 fragment 的 View
时以清除 EditText
为条件。
如果用户返回此 fragment ,您希望此 EditText
为空,对吗?然后,恕我直言,最好的解决方案是在转换到 F2 之前单击“下一步”按钮时清除它。
关于android - 从 backstack 恢复 Fragment 时更改 EditText 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757603/