Jer*_*rge 2 android android-gridview
我有一个网格视图,使用扩展BaseAdapter的自定义ImageAdapter类填充.图像是从SD卡中的特定文件夹动态加载的.我根据他们的帖子(1.png,2.png等)命名了图像.我还OnClickListener为网格项设置了一个:从SD卡播放与图像同名的音频文件.
当图像数量较少并且适合屏幕时,它可以很好地工作.
但是当数字很大并且图像不适合屏幕时,通过向下滚动屏幕显示的下一组行主要是重复前几行的图像而不是相应位置的图像.
我从logcat中发现,getView()适配器类的功能最初仅针对屏幕上可见的图像进行调用,并且在向下滚动时,不能正确调用其他位置
有时,整个图像集也会被重新排列.我应该做什么不同于网格视图的基本实现,以正确显示大量图像?还有什么我必须照顾的吗?
编辑 - 代码
我正在设置每个标签
tabGrid[i].setAdapter(new ImageAdapter(this,i));
Run Code Online (Sandbox Code Playgroud)
这是图像适配器类
@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;
}
Run Code Online (Sandbox Code Playgroud)
这些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;
}
Run Code Online (Sandbox Code Playgroud)
您拥有的erorr是因为视图被回收(convertView不为null)而您没有为这些视图设置内容.希望有所帮助!
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |