我有一個可編輯的元素列表:我可以向列表中添加/刪除新元素。此外,我可以復制每個元素——復制的元素附加到列表的末尾。每個元素都顯示有相應的 EditText,用戶可以在其中輸入給定元素的數量。問題:復制元素 E1 后,編輯 E1 的數量也會更改 E2 的數量。每個 ListItem 看起來像這樣: TextView(ElementTitle) / EditText(ElementQuantity) 在許多元素的列表上一切都完美無缺 - 直到我使用我的“復制”功能。我認為問題與重用 EditTextListeners 的 Recyclerview 有關。我按照此答案中的描述在 onCreateViewHolder 中分配它們:https://stackoverflow.com/a/31860393/6551120。我嘗試在我能想到的任何值的地方添加 notifydatasetchanged() 。在 duplicatedSelected() 中,我嘗試注銷和清除適配器和 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();在我的適配器中: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 回答

浮云間
TA貢獻1829條經驗 獲得超4個贊
您必須為您的數據模型實現可克隆接口并修改這一行
modulElements.add(modulElements.get(j).clone());
現在列表中有不同的對象
添加回答
舉報
0/150
提交
取消