在GridView中重复的图像

时间:2018-06-28 13:06:26

标签: java android

我列出了6张不同的图像。为了在GridView中显示这些图像,我有一个自定义适配器。现在的问题是,只有第一个图像会重复显示在GridView中,而不是所有不同的图像。 这是我的getView()

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;

    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.model_grid, null, false);
        convertView.setLayoutParams(new GridView.LayoutParams((int) (width / 2.05), (int) (height /4.6)));
        convertView.setPadding(1,1,1,2);
        ImageView thumb = convertView.findViewById(R.id.thumbs);
        Log.i(TAG, "getView: "+mthumbs.size()+mthumbs.get(0)+mthumbs+getItem(5));
        Picasso.with(mActivity).load(mthumbs.get(position)).into(thumb);
    } else {
        convertView = convertView;
    }

    return convertView;
}

3 个答案:

答案 0 :(得分:0)

我认为您在适配器中缺少以下方法。 请将以下方法添加到适配器。

public int getItemViewType(int position) {
        return position;
}

答案 1 :(得分:0)

public View getView(int position, View convertView, ViewGroup parent)将在您的适配器上每个位置被零次调用多次,并且它提供的convertView可能是可重用的实例。

由于仅在提供的convertView子级为null时才设置内容,所以您实际上将删除适配器的功能,并且仅在convertView仍为null时为要调用的最后一个元素设置图像。

将以下代码移到if / else检查之外:

ImageView thumb = convertView.findViewById(R.id.thumbs);
Log.i(TAG, "getView: "+mthumbs.size()+mthumbs.get(0)+mthumbs+getItem(5));
Picasso.with(mActivity).load(mthumbs.get(position)).into(thumb);

您还将要研究ViewHolder pattern,以使其更有效地工作(您几乎已经在尝试重用convertView了。)

答案 2 :(得分:0)

请检查getItem(int),getCount()和getItemId(int)的使用。

“ getCount()”-应该返回适​​配器的大小。

getItem(int)-通常,应在适配器中指定位置返回实际对象。

“ getItemId(int)”-应该返回该项的行ID。