我花了好几天才弄清楚这里发生了什么。
问题是如果我在第1行输入edittext,第3行的edittext会受到影响。它不仅仅是复制文本,而且是isFocus。如果我在第2行的edittext上输入相同,第4行中的edittext也会受到影响。
我使用了ViewHolder类。 我检查converView是否为空,然后将edittext初始化为ViewHolder,然后将其保存到converView的标签。 如果converView不为空,则重用converView并从converView的标记中获取ViewHolder。
请帮忙。
@Override
public View getView(int i, View converView, ViewGroup viewGroup) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (converView == null) {
converView = inflater.inflate(R.layout.adapteraktivitasakhirpanen, null);
holder = new ViewHolder();
holder.tv = (TextView) converView.findViewById(R.id.tvPemanen);
holder.atv1 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng1);
holder.atv2 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng2);
holder.atv3 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng3);
if (totalGandeng > 0) {
holder.atv1.setMinWidth(toDP(200));
adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, listGandeng1);
holder.atv1.setAdapter(adapter);
holder.atv1.setTag(i);
}
converView.setTag(holder);
} else {
System.out.println("converView not null");
holder = (ViewHolder) converView.getTag();
}
holder.tv.setText(names.get(i));
}
static class ViewHolder {
TextView tv;
AutoCompleteTextView atv1;
AutoCompleteTextView atv2;
AutoCompleteTextView atv3;
}
由于
答案 0 :(得分:1)
解决问题的两种方法:
不要使用ListView
的缓存技术。所以你的代码会喜欢这个:
public View getView(int i, View converView, ViewGroup viewGroup) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
converView = inflater.inflate(R.layout.adapteraktivitasakhirpanen, null);
holder = new ViewHolder();
holder.tv = (TextView) converView.findViewById(R.id.tvPemanen);
holder.atv1 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng1);
holder.atv2 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng2);
holder.atv3 = (AutoCompleteTextView) converView.findViewById(R.id.atvGandeng3);
if (totalGandeng > 0) {
holder.atv1.setMinWidth(toDP(200));
adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, listGandeng1);
holder.atv1.setAdapter(adapter);
holder.atv1.setTag(i);
}
holder.tv.setText(names.get(i));
}
此解决方案会让您的应用运行速度变慢。
AuctoCompleteTextView
TextChangeListener
,并且每次更改文本时都必须保存,以便在Listview
再次创建项目视图时还原它。答案 1 :(得分:0)
感谢您的帮助。但是我找到了一个更适合我案例的方法。
所以我做的是在构造函数中创建所有视图,然后返回带有位置的getView()视图。
public myAdapter(Context context, List<String> list) {
this.context = context;
this list = list;
createAllView();
}
public void createAllView() {
for (int i = 0; i < list.size(); i++) {
/**
* Create layout view using LayoutInflater
*/
listView.add(view);
}
}
public View getView(int pos, View converView, ViewGroup viewGroup) {
return listView.get(pos);
}