网上有大量有关ListView和ListAdapter回收流程的帖子,但到目前为止我无法解决我的问题。
我有自定义ListView行,并使用从远程服务器获取的数据填充行内的项目(TextViews,ImageViews等)。屏幕最多可以一次显示5行,如果我有更多行,我必须滚动。问题是;适配器只存储和回收前5行的信息,即使我滚动查看第6行,第7行,第8行等,我也会在随机位置一次又一次地看到相同的5行。
以下是代码:
public class ListAdapter extends BaseAdapter {
private ArrayList<String> id, name, address;
private Context context;
public ListAdapter(Context c, ArrayList<String> id,
ArrayList<String> name, ArrayList<String> address,) {
this.id = id;
this.name = name;
this.address = address;
this.context = c;
}
@Override
public int getCount() {
return id.size();
}
@Override
public Object getItem(int position) {
return id.get(position);
}
@Override
public long getItemId(int id) {
return id;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowsLayout;
if (convertView == null) {
rowsLayout = (View)LayoutInflater.from(context)
.inflate(R.layout.list_item, null);
//Assign values to TextViews in here
} else {
rowsLayout = convertView;
}
return rowsLayout;
}
}
我尝试使用this website中的方法,但没有帮助。
如果有人可以给我一个解决方案(请提供代码)或者将我引导到另一个帖子,我将不胜感激。
答案 0 :(得分:0)
从此处更改您的代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowsLayout;
if (convertView == null) {
rowsLayout = (View)LayoutInflater.from(context)
.inflate(R.layout.servisler_list_item, null);
//Assign values to TextViews in here
} else {
rowsLayout = convertView;
}
return servisRowsLayout;
}
到此:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowsLayout;
if (convertView == null) {
rowsLayout = (View)LayoutInflater.from(context)
.inflate(R.layout.servisler_list_item, null);
} else {
rowsLayout = convertView;
}
//Assign values to TextViews in here
return servisRowsLayout;
}
您需要在每次 getView()
来电时“为TextViews分配值”,而不仅仅是其中一些。