【问题标题】:Updating images in GridView with custom adapter every 10 sec每 10 秒使用自定义适配器更新 GridView 中的图像
【发布时间】:2015-03-25 10:55:53
【问题描述】:

我的Activity 中有Fragment。在这个片段中,我展示了GridView,它填充了自定义适配器。我正在使用 Picasso 库从网络下载图像。关键问题是我不知道如何每 10 秒更新一次 GridView 中的图像(服务器上的图片每 10 秒更改一次,购买链接保持静态)。

我已经尝试在片段中使用Handler 和 gridview.invalidate() 但这对我没有帮助:(

任何关于如何正确更新列表视图内容(无需滚动或开始滚动)的帮助将不胜感激。

PictureAdapter.java 公共类 PicturesAdapter 扩展 BaseAdapter {

private Context mContext;
private List<Camera> cameras;

public PicturesAdapter(Context mContext, List<Camera> cameras) {
    this.mContext = mContext;
    this.cameras = cameras;
}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    PictureHolder pictureHolder;

    if (convertView == null){

        LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();

        convertView = inflater.inflate(R.layout.picture_item_layout,parent,false);

        pictureHolder = new PictureHolder();
        pictureHolder.pictureItemImageView = (ImageView)convertView.findViewById(R.id.picture_item_image);
        pictureHolder.pictureItemTextView = (TextView)convertView.findViewById(R.id.picture_item_text);

        convertView.setTag(pictureHolder);
    } else {
        pictureHolder = (PictureHolder)convertView.getTag();
    }

    Picasso.with(mContext)
            .load(cameras.get(position).getCameraSysInfoIMGUrl())
            .networkPolicy(NetworkPolicy.NO_CACHE)
            .memoryPolicy(MemoryPolicy.NO_CACHE)
            .into(pictureHolder.pictureItemImageView);
    //Log.i("drew",cameras.get(position).getCameraSysInfoIMGUrl());
    pictureHolder.pictureItemTextView.setText(cameras.get(position).getCameraName());

    return convertView;
}

static class PictureHolder{
    ImageView pictureItemImageView;
    TextView pictureItemTextView;
}

public String getCameraId(int position) {
    return cameras.get(position).getCameraId();
}

}

【问题讨论】:

标签: android listview gridview picasso custom-adapter


【解决方案1】:

Picasso 现在具有声明性缓存控件。例如,您可以指定类似

Picasso.with(context)
  .load(url)
  .networkPolicy(NetworkPolicy.NO_CACHE)
  .memoryPolicy(MemoryPolicy.NO_CACHE)
  .into(imageView);

这迫使毕加索从网络重新获取图像。

【讨论】:

  • 好的,我现在试试这个解决方案。我的片段中需要任何处理程序吗?
  • 如果我将 .networkPolicy(NetworkPolicy.NO_CACHE) 和 .memoryPolicy(MemoryPolicy.NO_CACHE) 与将新适配器设置为 Gridview 的处理程序一起使用,显然我会看到所有 GridView 的完全重绘。是否可以强制更新 notifyDataSetChanged 或其他内容,而不是完全重绘 gridView 的内容?
  • 您不需要将适配器设置为GridView。你为什么要这样做?
  • 我有一个对象列表,其中包含所有信息,如链接、附加信息等。此列表在第一次运行时生成并在此会话中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多