Android 自定义GridView的位置错误
我创建了一个自定义的GridView。它可以工作,但是Android 自定义GridView的位置错误,android,gridview,Android,Gridview,我创建了一个自定义的GridView。它可以工作,但是i在日志中显示了错误的位置 日志输出为0,1,2,00,1,2,3,4,5 在我的GridView中,所有元素都存在,但第三个元素之后的标题和图像错误 当我点击元素时,我得到了正确的索引 我是Android新手。是否有缓存或我必须清理GridView?我发现了很多类似的线索,但没有人能帮上忙。如果你需要更多的代码,请让我知道 public View getView(int i, View convertView, ViewGroup pare
i
在日志中显示了错误的位置
日志输出为0,1,2,0
0,1,2,3,4,5
在我的GridView中,所有元素都存在,但第三个元素之后的标题和图像错误
当我点击元素时,我得到了正确的索引
我是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;
}
你的观点是循环的,这就是为什么这个问题发生的原因。试试下面的代码
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;
}
在适配器内添加视图保持架
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;
}
将静态类放在您的
公共类X扩展BaseAdapter
视图被回收,这就是发生此问题的原因。试试下面的代码
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;
}
在适配器内添加视图保持架
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;
}
将静态类放入您的
公共类X扩展BaseAdapter
convertView将循环使用。将日志从if-else语句中移出,并检查positionconvertView是否将循环使用。将日志移出if-else语句并检查位置