0

我正在使用自定义列表视图,使用BaseAdapter一切正常,然后我不得不使用Viewholder优化列表视图。

现在每次我滚动我的列表视图时,它每次都会显示 5 到 6 条记录。这是我正在使用的代码:

Context context;
LayoutInflater inflater;
MainActivity main;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> itemList;

static ImageLoader imageLoader;
Internholder holder;
String flight;
 View itemView ;
ImageView flag;
TextView flight_view,status_view;
TextView origin_item_view;
TextView expected_time_view,flight_item_view;
HashMap<String, String> resultp = new HashMap<String, String>();
List<String> values = new ArrayList<String>();

public khidomlistadapter(Context context,
        ArrayList<HashMap<String, String>> arraylist) {
    this.context = context;
    data = arraylist;

    imageLoader = new ImageLoader(context);
}

@Override
public int getCount() {
    return data.size();
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

public View getView(final int position, View convertView, ViewGroup parent) {
    // Declare Variables
    View v = convertView;
    Internholder holder;    
    if (v == null) {
    LayoutInflater vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    v = vi.inflate(R.layout.listview_item, null);
    holder = new Internholder();
    holder.flight_item_view = (TextView) v.findViewById(R.id.flight);
    holder.origin_item_view = (TextView) v.findViewById(R.id.origin);
    holder.expected_time_view = (TextView) v.findViewById(R.id.expected);
    holder.status_view =(TextView) v.findViewById(R.id.status);
    // Locate the ImageView in listview_item.xml
    holder.flag = (ImageView) v.findViewById(R.id.flag);
    v.setTag(holder);

    }
    else
    {
        holder = (Internholder) v.getTag();
    }
    // Get the position


    resultp = data.get(position);

     //Capture position and set results to the ImageView
     //Passes flag images URL into ImageLoader.class
    holder.flight_item_view.setText(resultp.get("flight"));
    holder.origin_item_view.setText(resultp.get("origin"));
    holder.expected_time_view.setText(resultp.get("expected_time"));
    holder.status_view.setText(resultp.get("status"));
    imageLoader.DisplayImage(resultp.get("flag"), holder.flag);



    return v;
}

谁能指出我做错了什么?

4

2 回答 2

0

你可以像这样夸大你的观点

v = inflater.inflate(R.layout.listview_item, parent, false);

可能这会有所帮助。

于 2015-01-18T20:36:35.907 回答
0

您应该为 2 个被覆盖的 getter 提供正确的返回值。根据您的其余代码,这可能有效:

@Override
public Object getItem(int position) {
    return data.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}
于 2015-01-18T20:44:39.443 回答