How to get data from Edit Text in a RecyclerView?

前端 未结 3 1134
挽巷
挽巷 2021-02-05 19:05

I have recyclerview with edit text. Each row has a edit text. I am entering values in the edit text manually and after i enter values, I want to get those values in each and eve

相关标签:
3条回答
  • 2021-02-05 19:16

    To do this there are two ways:-

    1) Add save Button in each row of RecyclerView on this Button click (onClick)

     @Override
            public void onClick(View v) {
               String ans = holher.numPicker.getText().toString();
               // save ans to sharedpreferences or Database
            }
    

    2) Add onTextChangedListener to EditText

    holher.mumPicker.addTextChangedListener(new TextWatcher() {
    
       public void afterTextChanged(Editable s) {}
    
       public void beforeTextChanged(CharSequence s, int start,
         int count, int after) {
       }
    
       public void onTextChanged(CharSequence s, int start,
         int before, int count) {
          String ans = holher.numPicker.getText().toString();
               // save ans to sharedpreferences or Database
       }
      });
    

    Then in your MainActivity.java retrive data from sharedpreferences or database

    0 讨论(0)
  • 2021-02-05 19:16

    I had a similar problem.My Recyclerview contained one Textview, two EditTexts and one remove Button to remove the item from the Recyclerview. I am getting the data from both the Edittexts, from a model class using a button from my activity. Everything works well I just want to know what all optimizations I can make. Please give your suggestions in a detailed manner.

    My Model Class:

    public class OrderGS {
      String names, rty,qty;
    
        public OrderGS(String name, String rty, String qty) {
            this.names = name;
            this.rty = rty;
            this.qty = qty;
        }
    
        public String getName() {
            return names;
        }
    
        public void setName(String names) {
            this.names = names;
        }
    
        public String getRty() {
            return rty;
        }
    
        public void setRty(String rty) {
            this.rty = rty;
        }
    
        public String getQty() {
            return qty;
        }
    
        public void setQty(String qty) {
            this.qty = qty;
        }
    }
    

    Above class holds the three Strings one is the titile and the two hold the edittext data.

    My Adapter code:

    class OOHolderI extends RecyclerView.ViewHolder{
    
            TextView title;
            EditText rty,qty;
            public OOHolderI(View itemView) {
                super(itemView);
                title = itemView.findViewById(R.id.text_order);
                rty = itemView.findViewById(R.id.editRTY);
                qty = itemView.findViewById(R.id.editQTY);
                itemView.findViewById(R.id.button_remove).setOnClickListener(v -> {
                   arrayList.remove(getAdapterPosition());
                   if(rtyArray.size()>0) {
                       rtyArray.remove(getAdapterPosition());
                       qtyArray.remove(getAdapterPosition());
                   }
                   notifyDataSetChanged();
               });
                rty.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                    }
    
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                    }
    
                    @Override
                    public void afterTextChanged(Editable s) {
                    arrayList.get(getAdapterPosition()).setRty(s.toString());
                    if(!rtyArray.contains(getAdapterPosition())){
                    rtyArray.add(getAdapterPosition());}
                    }
                });
                qty.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                    }
    
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                    }
    
                    @Override
                    public void afterTextChanged(Editable s) {
                        arrayList.get(getAdapterPosition()).setQty(s.toString());
                        if(!qtyArray.contains(getAdapterPosition())) {
                            qtyArray.add(getAdapterPosition());
                        }
                    }
    
                });
    
    
            }
    
    }
    

    In the adapter I am using two arraylists rtyArray and qtyArray to hold the position of the Edittext data in the model class.

    public ArrayList<Integer> getRTY() {
        return rtyArray;
    }
    public ArrayList<Integer> getQTY(){
        return qtyArray;
    } 
    

    The above two functions return the positions of the Edittextdata

    My Activity:

     findViewById(R.id.button_save).setOnClickListener(v -> {
                ArrayList<Integer> rtyArray = adapter.getRTY();
                ArrayList<Integer> qtyArray = adapter.getQTY();
                if(rtyArray.size()>0) {
                   for(Integer i: rtyArray){
                  //get data here like 
                  arrayListOfModel.get(i).getRty(); 
                  arrayListOfModel.get(qtyArray.get(i)).getQty();
                   }
                }
            });
            adapter.notifyDataSetChanged();
    

    In my case both the position holding arrays are always equal in size.

    0 讨论(0)
  • 2021-02-05 19:17

    You don't need to use so many lists, just create a class that will contain all the data of single item, there is no need for buttons, use just text change listener instead.

    sample code

    public class RetItem
    {
        public String _itemName;
        public String _itemQty;
        public String _itemPcode;
        public String _itemPlant;
    }
    
    public class SelectItemAdapter extends RecyclerView.Adapter<SelectItemAdapter.ItemHolder> {
    
        private List<RetItem> _retData;
         public SelectItemAdapter(Context context, String[] mDataset) {
            layoutInflater = LayoutInflater.from(context);
            _retData = new ArrayList<RetItem>(mDataset.length);
            this.mDataset = mDataset;
        }
    
          @Override
        public void onBindViewHolder(SelectItemAdapter.ItemHolder holder, final int position) {
            holder.setItemName(itemsName.get(position));
            holder.setItemName.addTextChangedListener(new TextWatcher() {
    
               public void afterTextChanged(Editable s) {}
    
               public void beforeTextChanged(CharSequence s, int start,
                 int count, int after) {
               }
    
               public void onTextChanged(CharSequence s, int start, int before, int count) {
                 _retData.get(position)._itemName = s.toString();
               }
              });
    
            holder.setItemQty(itemsQty.get(position));
            holder.setItemQty.addTextChangedListener(new TextWatcher() {
    
               public void afterTextChanged(Editable s) {}
    
               public void beforeTextChanged(CharSequence s, int start,
                 int count, int after) {
               }
    
               public void onTextChanged(CharSequence s, int start, int before, int count) {
                 _retData.get(position)._itemQty = s.toString();
               }
              });
    
            holder.setItemPCode(itemsPCode.get(position));
            holder.setItemPCode.addTextChangedListener(new TextWatcher() {
    
               public void afterTextChanged(Editable s) {}
    
               public void beforeTextChanged(CharSequence s, int start,
                 int count, int after) {
               }
    
               public void onTextChanged(CharSequence s, int start, int before, int count) {
                 _retData.get(position)._itemPcode = s.toString();
               }
              });       
            holder.setItemPlant(itemPlant.get(position));
            holder.setItemPlant.addTextChangedListener(new TextWatcher() {
    
               public void afterTextChanged(Editable s) {}
    
               public void beforeTextChanged(CharSequence s, int start,
                 int count, int after) {
               }
    
               public void onTextChanged(CharSequence s, int start, int before, int count) {
                 _retData.get(position)._itemPlant = s.toString();
               }
              });
        }
    
        public List<RetItem> retrieveData()
        {
            return _retData;
        }
    }
    
    0 讨论(0)
提交回复
热议问题