我有一個(gè)可編輯的元素列表:我可以向列表中添加/刪除新元素。此外,我可以復(fù)制每個(gè)元素——復(fù)制的元素附加到列表的末尾。每個(gè)元素都顯示有相應(yīng)的 EditText,用戶可以在其中輸入給定元素的數(shù)量。問(wèn)題:復(fù)制元素 E1 后,編輯 E1 的數(shù)量也會(huì)更改 E2 的數(shù)量。每個(gè) ListItem 看起來(lái)像這樣: TextView(ElementTitle) / EditText(ElementQuantity) 在許多元素的列表上一切都完美無(wú)缺 - 直到我使用我的“復(fù)制”功能。我認(rèn)為問(wèn)題與重用 EditTextListeners 的 Recyclerview 有關(guān)。我按照此答案中的描述在 onCreateViewHolder 中分配它們:https://stackoverflow.com/a/31860393/6551120。我嘗試在我能想到的任何值的地方添加 notifydatasetchanged() 。在 duplicatedSelected() 中,我嘗試注銷和清除適配器和 LayoutManager 并創(chuàng)建一個(gè)新的適配器 - 但沒(méi)有任何結(jié)果。這是復(fù)制我的元素的方法(在 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 的數(shù)量時(shí)的預(yù)期結(jié)果:E1 的數(shù)量發(fā)生變化輸入 E1 的數(shù)量時(shí)的實(shí)際結(jié)果:E1 和 E2 的數(shù)量(以及 E3、E4、E5...當(dāng)我復(fù)制多次時(shí))發(fā)生變化。如果我將元素列表保存到數(shù)據(jù)庫(kù)并重新打開(kāi)它,我可以完美地編輯 E1 的數(shù)量并且它不會(huì)改變 E2 的數(shù)量 - 正如我期望的那樣在第一種情況下發(fā)生。歡迎任何提示或想法,非常感謝!
使用 EditText 編輯 RecyclerView 中的重復(fù)項(xiàng)目
飲歌長(zhǎng)嘯
2023-05-10 16:58:05