2

我对 Volley 和 ListView 有疑问。也许我不明白 Volley 应该如何工作......看这里,这是我的 Activity 中的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRequestQueue = Volley.newRequestQueue(this);
    imageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());

    items = createItemList();

    expListView = (ListView) findViewById(R.id.listView);
    ListAdapter listAdapter = new ListAdapter();
    expListView.setAdapter(listAdapter);
}

我设置Volley.newRequestQueue(this)ImageLoader使用BitmapLruCache这里相同)。

在我的 ListAdapter 中,我覆盖getView()

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) 
            convertView = infalInflater.inflate(R.layout.menu_item, null);
        final ImageView ivCover = (ImageView) convertView.findViewById(R.id.icCoverThumb);
        imageLoader.get(items.get(position).url, ImageLoader.getImageListener(ivCover, R.drawable.ic_launcher, R.drawable.ic_launcher));
        return convertView;
    }

我在这里使用imageLoader.get(items.get(position).url, ImageLoader.getImageListener(ivCover, R.drawable.ic_launcher, R.drawable.ic_launcher));(这里是嫩点吗?)。

拇指已加载但 smth 出错了:当应用程序第一次启动时,列表视图中的第一项具有重复的 ico,其中一个图标来自另一行 - http://prntscr.com/1wmrck

谢谢!

4

1 回答 1

2

没有更多信息很难重现,但我建议使用NetworkImageView从网络加载缩略图,顺便说一句,我会使用“ViewHolder”来提高你的性能ListView

ArrayAdapter这是在 ListView 上显示推文的示例

...
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.tweet_list_item, null);
        holder = new ViewHolder();
        holder.imageView = (NetworkImageView) convertView.findViewById(R.id.twitterUserImage);
        //set more views (username, text, date ...)

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    //get the current element from the data array
    Tweet currentTweet = getItem(position);

    //set data into the views
    holder.imageView.setImageUrl(currentTweet.getUser().getProfileImageUrl(), VolleyManager.getImageLoader());
    //...


    return convertView;
}

private static class ViewHolder {
    private NetworkImageView imageView;
    //other views...
}
于 2013-10-11T15:32:42.030 回答