我有一个网格视图,使用扩展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()
功能是否重要?目录和文件名都有效。
答案 0 :(得分:5)
这是一个应该更好的快速解决方案。
@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;
}
你的erorr是因为视图被回收(convertView not null)并且你没有为那些设置内容。希望有所帮助!