使用EditText在RecyclerView中编辑重复项

时间:2019-08-02 16:01:43

标签: java android android-recyclerview android-edittext

我有一个可编辑的元素列表:我可以在列表中添加/删除新元素。此外,我可以复制每个元素-重复的元素将附加到列表的末尾。每个元素都显示有一个对应的EditText,用户可以在其中输入给定元素的数量。问题:复制元素E1后,编辑E1的数量也会更改E2的数量。

每个ListItem看起来像这样: TextView(ElementTitle)/ EditText(ElementQuantity) 在许多元素的列表上,所有内容都可以正常使用-直到我使用“重复”功能。 我认为问题与Recyclerview重用EditTextListeners有关。我在此答案中描述了在onCreateViewHolder中分配这些内容:https://stackoverflow.com/a/31860393/6551120

我尝试在我可以想象任何值的地方添加notifydatasetchanged()。在plicateddSelected()中,我尝试注销并清除适配器和LayoutManager并创建新的适配器-没有任何结果。

这是复制我的元素的方法(在ListActivity中):

private void duplicateSelected(){
   List selectedItemPositions = mAdapter.getSelectedItems();
   for (int i = 0; i < selectedItemPositions.size(); i++) {
      int j =(int) selectedItemPositions.get(i);
      modulElements.add(modulElements.get(j));
   }
   mAdapter.notifyDataSetChanged();

在MyAdapter中:

private class ModulElementEditTextListener implements TextWatcher {
        private int position;

        public void updatePosition(int position) {
            this.position = position;
        }

        //Other Override Methods cut out for simplicity    

        @Override
        public void afterTextChanged(Editable editable) {
            updatePosition(position);
            int timesMultiplied;
            if(editable.toString().equals("")){
                timesMultiplied=Integer.parseInt("0");
            }else{
                timesMultiplied = Integer.parseInt(editable.toString());
            }            

            modulElements.get(position)
                .setMultiplier(newModulElementMultiplier());
            modulElements.get(position)
                .getMultiplier().setTimesMultiplied(timesMultiplied);            
        }
    } 

输入E1数量时的预期结果:E1的数量更改

输入E1数量时的实际结果:E1和E2的数量(以及当我重复多次时E3,E4,E5 ...的数量)会发生变化。

如果我将元素列表保存到数据库中并重新打开,我可以完美地编辑E1的数量,并且它不会更改E2的数量-我希望在第一种情况下会发生这种情况。

欢迎任何提示或想法,非常感谢!

1 个答案:

答案 0 :(得分:0)

您必须为数据模型实现cloneable接口并修改此行

modulElements.add(modulElements.get(j).clone());

现在列表中有不同的对象