我们如何在 hashmap onTextChanged Listener 中存储 edittext 值
How we can store edit text values inside hashmap onTextChangedListner
我正在使用可扩展列表视图,其中每个子布局都有一个编辑文本。我正在为每个文本框触发 setOnFocusChangeListener 以防止数据丢失。
但我观察到,只有当编辑文本光标下一个移动时,我输入的文本才会存储到 hashmap 中。但是我需要在自己输入时存储输入的文本,比如 onKeyUp。
注意:我也尝试过 Text Watchers,但它没有按预期工作
代码
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 的文本框 1 中输入文本,相同的文本将在 parent2 的任何一个文本框中复制。
如果有人建议我如何实现这一点,那将会很有帮助。
@Override
public View getChildView(final int viewPosition, 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(viewPosition));
/*
holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
mapping.put(viewPosition, 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(viewPosition, holder.editText.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
return view;
}
private class ViewHolder {
protected EditText editText;
}
我正在使用可扩展列表视图,其中每个子布局都有一个编辑文本。我正在为每个文本框触发 setOnFocusChangeListener 以防止数据丢失。
但我观察到,只有当编辑文本光标下一个移动时,我输入的文本才会存储到 hashmap 中。但是我需要在自己输入时存储输入的文本,比如 onKeyUp。
注意:我也尝试过 Text Watchers,但它没有按预期工作
代码
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 的文本框 1 中输入文本,相同的文本将在 parent2 的任何一个文本框中复制。
如果有人建议我如何实现这一点,那将会很有帮助。
@Override
public View getChildView(final int viewPosition, 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(viewPosition));
/*
holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
mapping.put(viewPosition, 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(viewPosition, holder.editText.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
return view;
}
private class ViewHolder {
protected EditText editText;
}