java - 为什么 EditText 调用 notifyDataSetChanged() 方法?
问题描述
我正在处理一个奇怪的情况。我实现了一个扩展 ArrayAdapter 的类。有两种视图类型,第一种是“经典”视图,第二种是 EditText。只有一个项目可以同时具有第二种视图。当编辑文本成为焦点并且键盘打开时,我的适配器会不断重新加载并在一段时间后停止(不修复)。我不认为我重写的 notifyDataSetChanged() 方法的使用不好:
@Override
public void notifyDataSetChanged() {
Log.i("ADAPTER","reload");
super.notifyDataSetChanged();
}
我没有得到这个日志,但在:
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Log.i("ADAPTER","new view");
//
// some stuff
//
return convertView;
}
public class LabelAdapter extends ArrayAdapter<Label> {
private ConfigInterface ci;
private DatabaseInterface di;
private int itemSelected;
public static int NORMAL = 0;
public static int SELECTED = 1;
public LabelAdapter(@NonNull Context context, int resource, DatabaseInterface databaseInterface, ConfigInterface configInterface) {
super(context, resource, configInterface.getLabels());
this.di = databaseInterface;
this.ci = configInterface;
itemSelected = -1;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final Label label = this.getItem(position);
final int pos = position;
Log.i("Test","tous");
if (getItemViewType(position) == SELECTED){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_lv_label_edit, null);
EditText et = convertView.findViewById(R.id.et_label_name); // it's this edit text
et.setText(label.getName());
et.requestFocus();
Log.i("Test","select");
ImageView check = convertView.findViewById(R.id.check);
check.setImageResource(R.drawable.ic_check);
ImageView del = convertView.findViewById(R.id.delete);
del.setImageResource(R.drawable.ic_delete);
return convertView;
}
else {
Log.i("Test","no sel");
convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_lv_label_item, null);
TextView tv = convertView.findViewById(R.id.l_name);
tv.setText(label.getName());
ImageView iv = convertView.findViewById(R.id.ic_label);
iv.setImageResource(R.drawable.ic_label);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Listen","label");
}
});
try {
int color = Color.parseColor(label.getColor());
iv.setColorFilter(color);
} catch (Exception e) {
}
TextView n = convertView.findViewById(R.id.number);
int n_ci = di.getCountDatabaseByLabel(label.getName());
if (n_ci != 0) n.setText("" + n_ci);
ImageView edit = convertView.findViewById(R.id.edit);
edit.setImageResource(R.drawable.ic_edit);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setSelectedItem(pos);
notifyDataSetChanged();
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Listen","item");
}
});
return convertView;
}
}
public void setSelectedItem(int posistion){
itemSelected = posistion;
}
@Override
public int getItemViewType(int position) {
if (position == itemSelected) return 1;
else return 0;
}
@Override
public void notifyDataSetChanged() {
Log.i("Test","reload");
super.notifyDataSetChanged();
}
}
解决方案
推荐阅读
- r - 使用 R Shiny 在后台保存 R 对象
- c# - 如何在 C# 中访问竹变量
- python - 在 Pandas 中连接 CSV 文件时,chr 中的日期格式
- python - 文本预处理 Python
- haskell - 如何从函数返回列表?
- spring - 什么时候可以禁用 csrf 保护
- vue.js - vue 在 v-for 中进行双重迭代
- python - Python pandas custom unmelt - 从重复的行创建列
- python-3.x - 我可以避免 Pycharm Docstrings 中的变量类型字段吗?
- java - java - 如何使用java中的索引删除()ArrayList()中的字符串元素序列?