这是我的适配器,由于某种原因,在getView中它只显示屏幕上的位置。
我使用((TextView) view.findViewById(R.id.name)).setText(items.get(position).name+" pos="+position);
注销屏幕上的哪个位置,并且一遍又一遍地仅显示0-6个位置。
显然我给了我一些可回收的屏幕位置,但我需要真正的ListView位置,如55,100等等。我想我错过了一些简单而重要的东西。
适配器非常通用:
public class BoxAdapter extends BaseAdapter{
ArrayList<ItemUnit> items;
Context context;
LayoutInflater lInflater;
public BoxAdapter (Context context, ArrayList<ItemUnit> items){
this.context=context;
this.items=items;
lInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
Log.d("MyLog","items.size()="+items.size());
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.listitem, parent, false);
((TextView) view.findViewById(R.id.id)).setText(""+items.get(position).id);
((TextView) view.findViewById(R.id.name)).setText(items.get(position).name+" pos="+position);
((TextView) view.findViewById(R.id.address)).setText(items.get(position).address);
}
return view;
}
}
答案 0 :(得分:1)
您正在使用convertView,它基本上重用了视图。因此,一旦呈现视图,它们就会被重用。否则你正在膨胀它。
但是只有在充气时才显示值。因此,当重用下一个视图时,没有显示。
你应该做的是这样的事情:
检查convertView是否可以重复使用。如果没有,请给它充气。在这两种情况下,都要显示显示。
public View getView(int position, View convertView, final ViewGroup parent) {
View view = convertView;
if (view == null)
view = lInflater.inflate(R.layout.listitem, parent, false);
((TextView) view.findViewById(R.id.id)).setText(""+items.get(position).id);
((TextView) view.findViewById(R.id.name)).setText(items.get(position).name+" pos="+position);
((TextView) view.findViewById(R.id.address)).setText(items.get(position).address);
return view;
}