我列出了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;
}
答案 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。