1

Я пытаюсь реализовать TextWatcher для редактирования текста внутри Viewholder RecycleView. Когда edittext был отредактирован, я хочу получить позицию адаптера, чтобы получить другую информацию в этой строке внутри recycleview.Adapter RecycleView Adapter (EditText), реализующий TextWatcher

Я не уверен, создавать ли пользовательский элемент textwatcher, который принимает в качестве пользователя в качестве аргумента (так что он может вызвать getAdapterPosition), потому что когда данные изменяются, я боюсь, что edittext может использовать другой зритель, когда recycleview перерабатывает содержание.

public static class DIViewHolder extends RecyclerView.ViewHolder { 
     TextView invName; 
     EditText invWasted; 
     EditText invEnding; 
     EditText invAdded; 

     DIViewHolder(View itemView) { 
      super(itemView); 
      invName = (TextView)itemView.findViewById(R.id.di_inventory_name); 
      invAdded = (EditText)itemView.findViewById(R.id.di_inventory_added); 
      invWasted = (EditText)itemView.findViewById(R.id.di_inventory_wasted); 
      invEnding = (EditText)itemView.findViewById(R.id.di_inventory_end); 
     } 
    } 


    @Override 
    public DIViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_item_daily_inventory, viewGroup, false); 
     DIViewHolder pvh = new DIViewHolder(v); 

     return pvh; 
    } 

ответ

0
Try this 

     public static class DIViewHolder extends RecyclerView.ViewHolder implements TextWatcher { 
       TextView invName; 
       EditText invWasted; 
       EditText invEnding; 
       EditText invAdded; 

       DIViewHolder(View itemView) { 
        super(itemView); 
        invName = (TextView)itemView.findViewById(R.id.di_inventory_name); 
        invAdded = (EditText)itemView.findViewById(R.id.di_inventory_added); 
        invWasted = (EditText)itemView.findViewById(R.id.di_inventory_wasted); 
        invEnding = (EditText)itemView.findViewById(R.id.di_inventory_end); 
        invName.addTextChangedListener(this); 
       } 

     @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 
     int position = getAdapterPosition(); 
        /* Use this position to retrieve the object for the row and make the 
    changes, preferably have an interface defined which would communicate back the 
position to activity/fragment; Do data object changes there. */ 
        RowObject object = yourRowObjectsList.get(position); 
        //Do changes to your row object. 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }