0

I have a list of elements that is editable: I can add/delete new elements to the list. Furthermore I can duplicate each Element - duplicated elements are appended to the end of the list. Each element is displayed with a corresponding EditText where users can input quantity of the given element. The Problem: After duplicating an Element E1, editing the quantity of E1 also changes quantity of E2.

Every ListItem looks like this: TextView(ElementTitle) / EditText(ElementQuantity) Everything works flawlessly on lists of many elements - until I use my "duplicate" function. I assume that the problem has something to do with the Recyclerview reusing the EditTextListeners. I am assigning these in onCreateViewHolder as described in this answer: https://stackoverflow.com/a/31860393/6551120.

I tried adding notifydatasetchanged() wherever I could imagine any value. In duplicatedSelected() I tried unregistering and clearing adapter and LayoutManager and creating a new Adapter - without any result.

This is the method that duplicates my elements (In 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();

In 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);            
        }
    } 

Expected result when entering quantity for E1: Quantity for E1 changes

Actual result when entering quantity for E1: Quantity for E1 and E2 (And E3, E4,E5... when I duplicate multiple times) changes.

If I save the list of elements to a database and reopen it I can flawlessy edit quantity of E1 and it does NOT change quantity of E2 - as I would expect it to happen in the first case.

Every hint or idea welcome, thank you so much!

1 Answers1

0

You must implement the cloneable interface for your data model and modify this line

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

Now you have different objects in the list

  • Oh thank you so much! Didnt even think in this direction - was so stuck in Recyclerview-things. Thanks for taking the time! – Yannis Beuke Aug 03 '19 at 08:06