android - 我们如何将编辑文本值存储在 hashmap onTextChangedListner 中
问题描述
我正在使用可扩展列表视图,其中每个子布局都有一个编辑文本。我正在为每个文本框触发setOnFocusChangeListener以防止数据丢失。
但我观察到,我输入的文本仅在编辑文本光标接下来移动时才存储到哈希图中。但是我需要在键入时存储输入的文本,例如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 的 textbox1 中输入文本,那么在 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;
}
推荐阅读
- google-apps-script - 更快地将多个谷歌表格合并到一张表格中
- php - PHP内置webserver破坏外来字符
- c# - 为什么与 MiniProfiler 一起使用时,Dapper QueryAsync 会出现歧义?
- algorithm - 如何回答这个递归问题,它和循环之间有很大区别吗
- java - 如何使用 Bazel 在 Android 中实现 Fabric Crashlytics?
- amazon-web-services - 从服务器上的容器访问 AWS S3 存储桶
- javascript - Object.assign 的奇怪行为
- google-street-view - 如何在街景中创建路径?
- typescript - Vue中使用Typescript和类组件装饰器时如何将数组传递给props
- sql-server - 日志传送大型数据库