从 backstack 恢复 Fragment 时更改 EditText 值
Change EditText value when Fragment is restored from backstack
我有两个片段:F1 和 F2
F1 包含:
- 用户可以填充的 EditText
- 一个'next'按钮转到F2
当用户按下'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" 按钮时清除它。
遇到同样的问题。
我是怎么解决的:
setSaveEnabled(false);用于编辑文本。
创建了单例模型class
一旦我移动到下一个片段,将数据保存在单例模型中。
在模型中的 CreateView 上设置数据以编辑文本。
可能会有一些更优化的 sol 可用,所以请大家在评论中提出建议。
我有两个片段:F1 和 F2
F1 包含:
- 用户可以填充的 EditText
- 一个'next'按钮转到F2
当用户按下'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
.
EditText
如果用户返回到此片段,您希望此 EditText
为空,对吗?然后,恕我直言,最好的解决方案是在转换到 F2 之前单击 "next" 按钮时清除它。
遇到同样的问题。
我是怎么解决的:
setSaveEnabled(false);用于编辑文本。
创建了单例模型class
一旦我移动到下一个片段,将数据保存在单例模型中。
在模型中的 CreateView 上设置数据以编辑文本。
可能会有一些更优化的 sol 可用,所以请大家在评论中提出建议。