我创建了一个自定义GridView。它有效,但i
在日志中显示错误的位置。
日志输出为0,1,2,0
我希望0,1,2,3,4,5
在我的GridView中,所有元素都存在,但标题和图像在第3个元素之后错误。
当我点击元素时,我得到正确的索引。
我是Android的新手。有缓存还是我必须清理GridView?我找到了很多类似的线程,但没有人可以提供帮助。如果您需要更多代码,请告诉我。
public View getView(int i, View convertView, ViewGroup parent) {
View gridViewAndroid;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
gridViewAndroid = new View(mContext);
gridViewAndroid = inflater.inflate(R.layout.course, null);
TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.android_gridview_text);
ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.android_gridview_image);
String url = "xxx/" + courses.get(i).getImageName();
Picasso.with(mContext).load(url).into(imageViewAndroid);
Log.d("IMAGE", "i" + i);
textViewAndroid.setText(courses.get(i).getName());
} else {
gridViewAndroid = (View) convertView;
}
return gridViewAndroid;
}
答案 0 :(得分:2)
您的观点已被回收,这就是为什么会出现此问题。尝试以下代码
在适配器中添加视图持有者
beans
将您的static class ViewHolder {
TextView textViewAndroid;
ImageView imageViewAndroid;
}
更改为以下代码
getView()
将静态类放在public View getView(int i, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.course, null);
holder = new ViewHolder();
holder.textViewAndroid = (TextView) convertView.findViewById(R.id.android_gridview_text);
holder.imageViewAndroid = (ImageView) convertView.findViewById(R.id.android_gridview_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String url = "xxx/" + courses.get(i).getImageName();
Picasso.with(mContext).load(url).into(holder.imageViewAndroid);
Log.d("IMAGE", "i" + i);
holder.textViewAndroid.setText(courses.get(i).getName());
return convertView;
}