Я использую расширяемый список, где каждый дочерний макет имеет один текст для редактирования. Я запускаю setOnFocusChangeListener для каждого из текстовых полей, чтобы предотвратить потерю данных.
Но я заметил, что введенный мною текст сохраняется в хэш-карте только при следующем перемещении курсора редактирования текста. Но мне нужно сохранять введенный текст при наборе текста, что-то вроде onKeyUp .
Примечание: Я также пробовал текстовые наблюдатели, но он не работает должным образом
Код
public Map<String, String> mapping = new HashMap<>();
@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
ViewHolder holder;
Map<String, String> item = (Map<String, String>) getChild(i, i1);
String key = item.get("item_code");
if (view == null) {
holder = new ViewHolder();
holder.editText = view.findViewById(R.id.txtRecordComment);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.editText.setText(mapping.get(key));
/*
holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
mapping.put(key, holder.editText.getText().toString());
}
}
});
*/
holder.editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
mapping.put(key, holder.editText.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
return view;
}
private class ViewHolder {
protected EditText editText;
}
Проблема с приведенным выше кодом заключается в том, что если я ввожу текст в текстовое поле parent1, этот же текст дублируется в любом из текстовых полей parent2.
Будет очень полезно, если кто-нибудь подскажет мне, как мне этого добиться.