1

我正在尝试为RecycleView的Viewholder内的编辑文本实现TextWatcher。当编辑edittext时,我想要获取适配器的位置以获取recycleview中该行的其他信息。实现TextWatcher的Android RecycleView适配器(EditText)

我不知道是否创建一个自定义的textwatcher,它将一个参数作为参数(以便它可以调用getAdapterPosition),因为当数据更改时,恐怕editcycle可能会在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) { 

       } 
      }