使用EditTexts和Checkbox的小型RecyclerView的问题

时间:2016-07-24 06:11:43

标签: android checkbox android-edittext android-recyclerview

我有一个近10个项目的小清单(在任何情况下都不会超过20个)。创建活动后不会更改。

我当前的设置:

  • 我使用RecyclerView作为列表。
  • 我在每个列表项中都有Checkbox 2 EditText(比如1和2)。
  • 我根据复选框是否选中以及EditText-1的值进行一些计算,并将新值填充到另一个EditText-2。
  • 在某些情况下,用户编辑EditText-2的值并再次进行计算,并将在所有其他位置填充,包括所有项目的EditText-1。

问题已解决:

另一个问题:

现在,由于EditText-1的数据更改会更改RecyclerView的所有其他项的值,因此我在调用后调用notifyDatasetChanged()来反映更改。但这会导致EditText失去焦点。并且它打算在notifyDatasetChanged之后重新创建所有视图。在这种情况下,即使是稳定的ids也没用。 (有关此问题的bug:https://code.google.com/p/android/issues/detail?id=204277)。该值甚至没有反映出来,EditText也失去了焦点。

我该怎么办?:

  • 有没有解决方法?在设置稳定的ID之后,我看到项值的奇怪变化。
  • 由于项目是固定的,并且在onCreate之后没有添加和删除项目,因此使用带容器的滚动视图并通过在循环中手动膨胀视图来添加项目(并且更新也将是轻松的,我认为)将使我的生活成为现实更容易吗?

2 个答案:

答案 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;
}

现在,我需要ArrayArrayList ListItemCustom个自定义,并在onCreate内填充您的项目。然后在适配器中传递此列表,然后相应地处理EditText和值。

希望这会有所帮助。

答案 1 :(得分:0)

解决方案很简单,在您的数据发生变化时请不要致电notifyDatasetChanged(),而是致电notifyItemChanged()notifyItemRangeChanged(),这只会更新那些有变化且您关注的视图将保持不变。