我有一个可编辑的元素列表:我可以向列表中添加/删除新元素。此外,我可以复制每个元素——复制的元素附加到列表的末尾。每个元素都显示有相应的 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 的数量 - 正如我期望的那样在第一种情况下发生。
欢迎任何提示或想法,非常感谢!
浮云间
相关分类