从 backstack 恢复 Fragment 时更改 EditText 值

Change EditText value when Fragment is restored from backstack

我有两个片段:F1 和 F2

F1 包含:

当用户按下'next'时,显示F2并将F1添加到backstack。所以当用户按下 F2 时,它 returns 到 F1.

当用户返回到 F1 时,我想重置 EditText 中的值。因为我只想在重新创建视图时重新初始化值,所以我重置了 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?

答案很可能是否定的。这种 "small" 黑客攻击通常会在未来导致巨大的 WTF 和长时间的调试会话。

例如,如果我没记错的话,这个 hack 将立即导致配置更改和保存与恢复流程上下文中的错误。由于在这两个流中片段的 View 将是 re-created,您将丢失用户的输入。

很可能,这不是您想要的行为。

我在评论中阅读了您的讨论,但仍然无法理解为什么您坚持要在 View.

片段的 re-creation 上条件清除 EditText

如果用户返回到此片段,您希望此 EditText 为空,对吗?然后,恕我直言,最好的解决方案是在转换到 F2 之前单击 "next" 按钮时清除它。

遇到同样的问题。

我是怎么解决的:

  1. setSaveEnabled(false);用于编辑文本。

  2. 创建了单例模型class

  3. 一旦我移动到下一个片段,将数据保存在单例模型中。

  4. 在模型中的 CreateView 上设置数据以编辑文本。

可能会有一些更优化的 sol 可用,所以请大家在评论中提出建议。