我有两个碎片:F1和F2
F1包含:
当用户按下' next'时,显示F2并将F1添加到backstack。因此,当用户按下F2时,它返回F1。
当用户返回F1时,我想重置EditText中的值。由于我只想在重新创建视图时重新初始化该值,因此我重置了onViewCreated
而不是onResume
中的值。
我遇到的问题是,当用户在尝试恢复之前状态的片段时按下后,系统会自动填充EditText。
该值会自onViewStateRestored
从saveInstanceState
捆绑包中自动重新填充。
所以我的问题是:覆盖onViewStateRestored
方法以将空包发送到超级(见下文)是一个好主意,因为它解决了我的问题?
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(null);
}
答案 0 :(得分:1)
所以我的问题是:覆盖onViewStateRestored方法以将空包发送到super(见下文)是一个好主意,因为它解决了我的问题?
答案很可能是否定的。这种“小”黑客通常会在未来导致巨大的WTF和长时间的调试。
例如,如果我没有弄错的话,这个hack会立即导致配置更改和保存和恢复流的上下文中的错误。由于在这两个流程中片段的View
将被重新创建,因此您将丢失用户的输入。
最有可能的是,这不是你想要的行为。
我在评论中阅读了您的讨论,但仍然无法理解为什么您坚持要求在重新创建片段EditText
时清除View
。
如果用户返回此片段,您希望此EditText
为空,对吗?然后,恕我直言,最好的解决方案是在转换到F2之前单击“下一步”按钮时将其清除。
答案 1 :(得分:1)
面临同样的问题。
我是如何解决的:
setSaveEnabled(false);用于编辑文本。
创建了一个 Singlton 模型类
移动到下一个片段后,将数据保存在单例模型中。
从模型设置 CreateView 上的数据以编辑文本。
可能有一些更优化的溶胶可用,所以请大家在评论中提出建议。