我有一个屏幕的3个状态的片段;添加、编辑和查看。在“添加”中,我创建一个实体并保存它。下次我在视图模式下打开它并使用
EditText entityName = (EditText) view.findViewById(R.id.entityName);
entityName.setText(entity.getEntityname());
我从视图模式中单击编辑按钮以打开编辑模式。我在此处更改实体名称并保存它。这将我带回到视图屏幕。但我发现实体名称没有更新。我调试并发现entity.getEntityname()
具有正确的值。我不知道为什么编辑文本不采用新值。
有什么想法吗
注意:我使用的是android版本2.2
8条答案
按热度按时间pbgvytdp1#
EditText似乎在
onCreateView
中重置文本时出现问题。所以这里的解决方案是重置onResume
中的文本。这个管用此外,onActivityCreated中也存在一个问题。我在onStart中重置了edittext的内容,它工作了。(来源:@savepopulation)
qlvxas9a2#
Android中有一些View类应该在容器分离时保存它们的状态。应在View.onSaveInstanceState()之前调用Fragment.onViewCreated()。因此,如果在方法Fragment.onViewCreated()中设置一个值。应该在方法View.onRestoreInstanceState(Parcelablestate)中清除该值。
例如TextView、RecyclerView等类,可以阅读www.example.com的代码TextView.java:
有两个参数来控制是否保存状态:“freezesText”和“hasSelection”。无法选择TextView,因此hasSelection为false。函数getFreezesText()在类TextView中也返回false。因此,TextView不会保存状态。www.example.com的代码EditText.java:
EditText返回true,因此EditText应该保存状态。
有一些方法来修复这个bug:
1.实现EditText.getFreezesText()并返回false,清除EditText中的select状态
2.实现EditText的onSaveInstanceState,返回null.like this:
3.use EditText.setSaveEnable(false);
4. add param in xml“saveEnable='false'”
wn9m85ua3#
如前所述,EditText似乎在onCreateView中重置文本时存在问题。
这是因为一旦创建了一个片段,直到我们将其从backstack中删除,它的onResume方法将被调用,因为视图不会再次创建。
所以这里的解决方案是在onResume中重置文本。这将工作在所有的时间,即使u锁定和解锁ur屏幕,而该片段是开放的,或你回来从另一个片段
但是,如果你从一个包中设置这个数据,最好把这个值保存在一个示例变量中,因为这个包可能会变成空的,你可能会得到空指针问题
46qrfjad4#
根据@TusharVengrulekar的说法,这就是你必须实现你的片段的方式
w3nuxt5m5#
在
onActivityCreated
中也有一个问题。我在onStart
中重置edittext的内容,它可以工作。rdrgkggo6#
这将在片段上100%工作
tpgth1q77#
onResume()
或onStart()
可以在popBackStack()
上重置EditText
上的文本,但问题是当应用程序进入后台时,它们中的任何一个都会被触发,这不是应用程序的预期行为。我们也可以这样做,重置EditText
上的文本-vc9ivgsu8#
你需要让你的代码在UI Thread上运行,并且它应该可以工作,如果你这样做,你甚至不必使用onResume():