gpt4 book ai didi

安卓 GridView : error while displaying large number of images

转载 作者:搜寻专家 更新时间:2023-11-01 07:38:55 26 4
gpt4 key购买 nike

我有一个 GridView ,它使用扩展 BaseAdapter 的自定义 ImageAdapter 类填充。图像是从 SD 卡中的特定文件夹动态加载的。我已经根据它们的位置命名了图像(1.png、2.png 等)。我还为网格项设置了 OnClickListener:从 SD 卡播放与图像同名的音频文件。

当图像数量较少且适合屏幕时,效果很好。

但是当数字很大,图片放不下屏幕时,向下滚动屏幕显示的下一组图片大多是前几行图片的重复,而不是相应位置的图片。

我从 logcat 中发现,适配器类的 getView() 函数最初仅针对屏幕上可见的图像被调用,并且在向下滚动时,它没有被正确调用以进一步职位

有时整组图像也会重新排列。我应该做一些与 GridView 的基本实现不同的事情来正确显示大量图像吗?还有什么我必须注意的吗?

编辑 - 代码

我设置每个标签使用

tabGrid[i].setAdapter(new ImageAdapter(this,i));

这是图像适配器类

@Override
public int getCount() {
// fileNames is a string array containing the image file names : 1.png, 2.png etc
return fileNames.length;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
// I did not use this function
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v;
if(convertView==null) {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.grid_image, null);
ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
String bitmapFileName = fileNames[position];
Bitmap bmp =(Bitmap)BitmapFactory.decodeFile(dir.getPath() + "/" + bitmapFileName);a
iv.setImageBitmap(bmp);
}
else {
v = convertView;
}
return v;
}

getItem()getItemId() 函数重要吗?目录和文件名均有效。

最佳答案

这是一个应该更好的快速修复。

@Override
public String getItem(int position) {
return fileNames[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if(convertView==null) {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.grid_image, parent, false);
}
else {
v = convertView;
}

ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
String bitmapFileName = getItem(position);
Bitmap bmp =(Bitmap)BitmapFactory.decodeFile(dir.getPath() + "/" + bitmapFileName);a
iv.setImageBitmap(bmp);

return v;
}
  1. 我填写了 getItem,它不是 100% 需要的,但拥有它总是更好。然后,您的其他适配器代码就可以依赖它了
  2. 每个条目的项目 ID 都应该不同,您可以使用 getItem(position).hashCode()(可能更慢)或只返回位置(我在这里这样做)。
  3. getView 方法有点棘手。这个想法是,如果 convertView 为 null,则创建它。然后,在每种情况下,您都设置 View 的内容。
  4. getView 项中的 inflate 应该使用父级作为父级,“false”用于告诉系统不要将新 View 添加到父级(gridview 会处理)。如果不这样做,一些布局参数可能会被忽略。

您遇到的错误是因为 View 被回收(convertView 不为空)并且您没有为它们设置内容。希望对您有所帮助!

关于安卓 GridView : error while displaying large number of images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6544542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com