我有一个近10个项目的小清单(在任何情况下都不会超过20个)。创建活动后不会更改。
我当前的设置:
RecyclerView
作为列表。 Checkbox
和 2 EditText
(比如1和2)。 问题已解决:
但是,在这种情况下,我遇到了多次调用TextWatcher的问题。我解决了这个问题:https://stackoverflow.com/a/31860393/1820644
更改复选框值会更改一些随机的其他复选框。解决了它:https://stackoverflow.com/a/38549047/1820644
另一个问题:
现在,由于EditText-1的数据更改会更改RecyclerView的所有其他项的值,因此我在调用后调用notifyDatasetChanged()
来反映更改。但这会导致EditText
失去焦点。并且它打算在notifyDatasetChanged
之后重新创建所有视图。在这种情况下,即使是稳定的ids也没用。 (有关此问题的bug:https://code.google.com/p/android/issues/detail?id=204277)。该值甚至没有反映出来,EditText也失去了焦点。
我该怎么办?:
答案 0 :(得分:0)
让我们使用一系列对象来保存EditText
的状态以及要在列表中填充的值。例如,列表中的每个项目可能看起来都像这个类。
public class ListItemCustom {
// Add some extra parameters to handle the state of the EditTexts
public String textOfEditText1;
public String textOfEditText2;
public boolean focusEditText1;
public boolean focusEditText2;
// Contains original values of your list item
public OriginalListItem mOriginalListItem;
}
现在,我需要Array
或ArrayList
ListItemCustom
个自定义,并在onCreate
内填充您的项目。然后在适配器中传递此列表,然后相应地处理EditText
和值。
希望这会有所帮助。
答案 1 :(得分:0)
解决方案很简单,在您的数据发生变化时请不要致电notifyDatasetChanged()
,而是致电notifyItemChanged()
或notifyItemRangeChanged()
,这只会更新那些有变化且您关注的视图将保持不变。