自定义适配器仅显示位置0-6(适合屏幕)

时间:2014-09-10 07:18:16

标签: android listview adapter

这是我的适配器,由于某种原因,在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;
    }

}

1 个答案:

答案 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;
        }