Android 我的Gridview适配器使用光标获取随机项

Android 我的Gridview适配器使用光标获取随机项,android,gridview,cursor,adapter,Android,Gridview,Cursor,Adapter,我正在尝试用GridView做一个布局。所以我用游标做了一个简单的适配器,但他在滚动GridView时会得到随机视图。我读过很多帖子,但现在有一个像我一样使用游标适配器,或者如果像我一样使用游标适配器,他们就不会有我的问题。我尝试过放置ViewHolder,但仍然存在相同的问题 有人能告诉我如何才能完成这项工作吗? 以下是他制作的一些照片: 什么时候开始 什么时候可以滚动 我使用的代码 对于设置适配器: cs = new CursorSongs(); aa = new AdapterAl

我正在尝试用GridView做一个布局。所以我用游标做了一个简单的适配器,但他在滚动GridView时会得到随机视图。我读过很多帖子,但现在有一个像我一样使用游标适配器,或者如果像我一样使用游标适配器,他们就不会有我的问题。我尝试过放置ViewHolder,但仍然存在相同的问题

有人能告诉我如何才能完成这项工作吗?

以下是他制作的一些照片: 什么时候开始

什么时候可以滚动

我使用的代码 对于设置适配器:

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