自定义GridView的位置错误Android

时间:2017-09-24 22:02:44

标签: android gridview

我创建了一个自定义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;
}

1 个答案:

答案 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; }