У меня есть список recyclerview (textView, EDITTEXT). Мне нужно реализовать событие addTextChangedListener.
Например, при вводе текста в EditText (на какой нибудь элемент списка), я хочу чтобы значение других EditText изменились. Например, если в onTextChanged попытаться вызвать edittext.settext, получится бесконечная рекурсия (т.к если мы изменим значение какого либо элемента, будет вызываться addTextChangedListener).
Как мне сделать так, чтобы я мог обращаться к элементам списка по индексу? Или может есть другие способы?
Вот мой код:
public class Converter {
private String mTitle;
private String mvTitle;
private Double mKey;
private Double mValue;
public Converter(String title, Double key, Double value, String vtitle){
mTitle = title;
mKey = key;
mValue = value;
mvTitle = vtitle;
}
public String getvTitle(){
return mvTitle;
}
public String getTitle(){
return mTitle;
}
public Double getKey(){
return mKey;
}
public Double getValue(){
return mValue;
}
public static ArrayList<Converter> createConvertedList() {
ArrayList<Converter> lengths = new ArrayList<Converter>();
lengths.add(new Converter("Товар1",1.0,0.00001,"аа"));
lengths.add(new Converter("Товар2",1.0,0.01,"m"));
lengths.add(new Converter("Товар3",1.0,0.1,"dm"));
lengths.add(new Converter("Товар4",1.0,1.0,"mm"));
lengths.add(new Converter("Товар5",1.0,0.00001,"аа"));
lengths.add(new Converter("Товар6",1.0,0.01,"m"));
lengths.add(new Converter("Товар7",1.0,0.1,"dm"));
lengths.add(new Converter("Товар8",1.0,1.0,"mm"));
lengths.add(new Converter("Товар9",1.0,0.01,"m"));
lengths.add(new Converter("Товар10",1.0,0.1,"dm"));
lengths.add(new Converter("Товар11",1.0,1.0,"mm"));
lengths.add(new Converter("Товар12",1.0,0.01,"m"));
lengths.add(new Converter("Товар13",1.0,0.1,"dm"));
lengths.add(new Converter("Товар14",1.0,1.0,"mm"));
lengths.add(new Converter("Товар15",1.0,0.00001,"аа"));
lengths.add(new Converter("Товар16",1.0,0.00001,"аа"));
return lengths;
}
}
Код Адаптера:
public class ConvertAdapter extends RecyclerView.Adapter<ConvertAdapter.ViewHolder> {
private List<Converter> conv;
ArrayList <TextView> k = new ArrayList<>();
public ConvertAdapter(List<Converter> myList) {
conv = myList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
Context context = viewGroup.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the custom layout
View convertView = inflater.inflate(R.layout.item_recycle, viewGroup, false);
// Return a new holder instance
ViewHolder viewHolder = new ViewHolder(convertView);
//k.add(i,viewHolder.textView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ConvertAdapter.ViewHolder viewHolder, final int i) {
k.add(i,viewHolder.textView);
viewHolder.textView.setText(conv.get(i).getTitle());
viewHolder.editText.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) {
}
});
}
@Override
public int getItemCount() {
return conv.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public EditText editText;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.titleView);
editText = itemView.findViewById(R.id.editText);
}
}
}
и Активити
public class MainActivity extends AppCompatActivity {
ArrayList<Converter> conv;
private ArrayList<String> titles;
private ArrayList<Double> keys;
private ArrayList<Double> values;
private ArrayList<String> vtitles;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView rvConv = (RecyclerView) findViewById(R.id.rvContacts);
conv = Converter.createConvertedList();
ConvertAdapter adapter = new ConvertAdapter(conv);
rvConv.setAdapter(adapter);
rvConv.setLayoutManager(new LinearLayoutManager(this));
}
}
