Android 我的Gridview适配器使用光标获取随机项
我正在尝试用GridView做一个布局。所以我用游标做了一个简单的适配器,但他在滚动GridView时会得到随机视图。我读过很多帖子,但现在有一个像我一样使用游标适配器,或者如果像我一样使用游标适配器,他们就不会有我的问题。我尝试过放置ViewHolder,但仍然存在相同的问题 有人能告诉我如何才能完成这项工作吗? 以下是他制作的一些照片: 什么时候开始 什么时候可以滚动 我使用的代码 对于设置适配器:Android 我的Gridview适配器使用光标获取随机项,android,gridview,cursor,adapter,Android,Gridview,Cursor,Adapter,我正在尝试用GridView做一个布局。所以我用游标做了一个简单的适配器,但他在滚动GridView时会得到随机视图。我读过很多帖子,但现在有一个像我一样使用游标适配器,或者如果像我一样使用游标适配器,他们就不会有我的问题。我尝试过放置ViewHolder,但仍然存在相同的问题 有人能告诉我如何才能完成这项工作吗? 以下是他制作的一些照片: 什么时候开始 什么时候可以滚动 我使用的代码 对于设置适配器: cs = new CursorSongs(); aa = new AdapterAl
cs = new CursorSongs();
aa = new AdapterAlbum(a,cs.getAllAlbums(a));
gvAlbums.setAdapter(aa);
gvAlbums.setOnItemClickListener(this);
public class AdapterAlbum extends CursorAdapter{
public AdapterAlbum(Context context, Cursor c) {
super(context, c,true);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
ViewHolder holder = (ViewHolder)view.getTag();
TextView tAlbum = (TextView)view.findViewById(R.id.tvAlbum);
ImageView iAlbum = (ImageView)view.findViewById(R.id.iAlbum);
tAlbum = holder.tAlbum;
iAlbum = holder.iAlbum;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater i = LayoutInflater.from(parent.getContext());
View v = i.inflate(R.layout.detalle_grid, parent,false);
ViewHolder holder = new ViewHolder();
holder.tAlbum = (TextView)v.findViewById(R.id.tvAlbum);
holder.iAlbum = (ImageView)v.findViewById(R.id.iAlbum);
holder.tAlbum.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM)));
String coverPath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ART));
Drawable img = Drawable.createFromPath(coverPath);
if(img != null){
holder.iAlbum.setImageDrawable(img);
}else{
holder.iAlbum.setImageResource(R.drawable.albumart_mp_unknown_list);
}
v.setTag(holder);
return v;
}
class ViewHolder{
TextView tAlbum;
ImageView iAlbum;
}
对于适配器:
cs = new CursorSongs();
aa = new AdapterAlbum(a,cs.getAllAlbums(a));
gvAlbums.setAdapter(aa);
gvAlbums.setOnItemClickListener(this);
public class AdapterAlbum extends CursorAdapter{
public AdapterAlbum(Context context, Cursor c) {
super(context, c,true);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
ViewHolder holder = (ViewHolder)view.getTag();
TextView tAlbum = (TextView)view.findViewById(R.id.tvAlbum);
ImageView iAlbum = (ImageView)view.findViewById(R.id.iAlbum);
tAlbum = holder.tAlbum;
iAlbum = holder.iAlbum;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater i = LayoutInflater.from(parent.getContext());
View v = i.inflate(R.layout.detalle_grid, parent,false);
ViewHolder holder = new ViewHolder();
holder.tAlbum = (TextView)v.findViewById(R.id.tvAlbum);
holder.iAlbum = (ImageView)v.findViewById(R.id.iAlbum);
holder.tAlbum.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM)));
String coverPath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ART));
Drawable img = Drawable.createFromPath(coverPath);
if(img != null){
holder.iAlbum.setImageDrawable(img);
}else{
holder.iAlbum.setImageResource(R.drawable.albumart_mp_unknown_list);
}
v.setTag(holder);
return v;
}
class ViewHolder{
TextView tAlbum;
ImageView iAlbum;
}
setText和setImageDrawable进入bindView,而不是newView。当我第一次创建此适配器时,我将其放在bindView中,但仍然存在问题。我不知道您以前做了什么,但我可以告诉您,新视图仅用于充气,而bindView用于在视图中放置内容。我重新编辑了代码和详细布局(我将文本视图与CompounDrawable放在一起)问题似乎是加载位图和大小。光标的位图似乎有很多大小,我想这就是问题所在:s