我有一个使用扩展 BaseAdapter 的自定义 ImageAdapter 类填充的网格视图。图像是从 SD 卡中的特定文件夹动态加载的。我根据它们的位置(1.png、2.png 等)命名了图像。我还OnClickListener
为网格项设置了一个:从 SD 卡播放与图像同名的音频文件。
当图像数量较少且适合屏幕时,它工作得很好。
但是当数量很大并且图像不适合屏幕时,向下滚动屏幕显示的下一组行大多是前几行的图像的重复,而不是相应位置的图像。
我从 logcat 中发现,getView()
适配器类的函数最初仅针对屏幕上可见的图像调用,并且在向下滚动时,它没有被正确调用以获取更多位置
有时,整组图像也会重新排列。为了正确显示大量图像,我应该做与网格视图的基本实现不同的事情吗?还有什么我必须照顾的吗?
编辑 - 代码
我正在使用设置每个选项卡
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()
功能重要吗?目录和文件名都是有效的。