i_trunker

Untitled

Mar 23rd, 2021
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  2.  
  3.     private String[] mDataset;
  4.  
  5.     public MyAdapter(String[] myDataset) {
  6.         mDataset = myDataset;
  7.     }
  8.  
  9.     @Override
  10.     public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
  11.                                                int viewType) {
  12.         View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_edittext, parent, false);
  13.         // pass MyCustomEditTextListener to viewholder in onCreateViewHolder
  14.         // so that we don't have to do this expensive allocation in onBindViewHolder
  15.         ViewHolder vh = new ViewHolder(v, new MyCustomEditTextListener());
  16.  
  17.         return vh;
  18.     }
  19.  
  20.     @Override
  21.     public void onBindViewHolder(ViewHolder holder, final int position) {
  22.         // update MyCustomEditTextListener every time we bind a new item
  23.         // so that it knows what item in mDataset to update
  24.         holder.myCustomEditTextListener.updatePosition(holder.getAdapterPosition());
  25.         holder.mEditText.setText(mDataset[holder.getAdapterPosition()]);
  26.     }
  27.  
  28.     @Override
  29.     public int getItemCount() {
  30.         return mDataset.length;
  31.     }
  32.  
  33.     @Override
  34.     public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {
  35.         ((ViewHolder) holder).enableTextWatcher();
  36.     }
  37.  
  38.     @Override
  39.     public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {
  40.         ((ViewHolder) holder).disableTextWatcher();
  41.     }
  42.  
  43.     public static class ViewHolder extends RecyclerView.ViewHolder {
  44.         // each data item is just a string in this case
  45.         public EditText mEditText;
  46.         public MyCustomEditTextListener myCustomEditTextListener;
  47.  
  48.         public ViewHolder(View v, MyCustomEditTextListener myCustomEditTextListener) {
  49.             super(v);
  50.  
  51.             this.mEditText = (EditText) v.findViewById(R.id.editText);
  52.             this.myCustomEditTextListener = myCustomEditTextListener;
  53.         }
  54.        
  55.         void enableTextWatcher() {
  56.             mEditText.addTextChangedListener(myCustomEditTextListener);
  57.         }
  58.  
  59.         void disableTextWatcher() {
  60.             mEditText.removeTextChangedListener(myCustomEditTextListener);
  61.         }
  62.     }
  63.  
  64.     // we make TextWatcher to be aware of the position it currently works with
  65.     // this way, once a new item is attached in onBindViewHolder, it will
  66.     // update current position MyCustomEditTextListener, reference to which is kept by ViewHolder
  67.     private class MyCustomEditTextListener implements TextWatcher {
  68.         private int position;
  69.  
  70.         public void updatePosition(int position) {
  71.             this.position = position;
  72.         }
  73.  
  74.         @Override
  75.         public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
  76.             // no op
  77.         }
  78.  
  79.         @Override
  80.         public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
  81.             mDataset[position] = charSequence.toString();
  82.         }
  83.  
  84.         @Override
  85.         public void afterTextChanged(Editable editable) {
  86.             // no op
  87.         }
  88.     }
  89. }
Add Comment
Please, Sign In to add comment