android - 从 backstack 恢复 Fragment 时更改 EditText 值

标签 android android-fragments android-lifecycle

我有两个 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/

相关文章:

java - 如何为我的 Android 应用程序制作表格

android - 如何通过特定关键字在 Android 中搜索 youtube 视频

android - UnitTest JSONObject 显示 null

android - 引入 Butterknife 库导致 fragment 类在绑定(bind) View 时出现运行时异常

java - FragmentMapActivity 中的 NoClassDefFoundError

android - 对 Android 文档 : Fragments 的澄清

android - FragmentManager.put/getFragment 与 findFragmentByTag

android - 尽管数据没有改变,但一些 fragment 观察者在从返回堆栈弹出后触发

android - LifecycleRegistry 的 popParentState 出现 ArrayIndexOutOfBoundsException

php - 使用 json 中的子句从数据库读取数据