2

このコードを使用してカーソルからアイテムを取得しますが、リストにあるアイテムを 1 つだけ返します。では、どうすればすべてのアイテムをリストに入れることができますか?これは私のコードですか?

class MyAdapter extends SimpleCursorAdapter
{
    private Context context;

    public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
    {
        super(context, layout, c, from, to);
        this.context = context;

    }
    public View getView(int position, View convertView, ViewGroup parent){
        Cursor cursor = getCursor();

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();         
        View v = inflater.inflate(R.layout.sbooks_row, null);           
        TextView title = (TextView)findViewById(R.id.title);
        if(title != null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE);
            String type = cursor.getString(index);
            title.setText(type);
        }

        TextView lyrics = (TextView)findViewById(R.id.lyrics);
        if(lyrics != null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_LYRICS);
            String type = cursor.getString(index);
            lyrics.setText(type);
        }

        ImageView im = (ImageView)findViewById(R.id.icon);
        if(im!=null){
            int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_FAVORITE);
            int type = cursor.getInt(index);
            if(type==1){
                im.setImageResource(android.R.drawable.btn_star_big_on);
            }
            else{
                im.setImageResource(android.R.drawable.btn_star_big_off);
            }
        }

        return v;
    }
4

2 に答える 2

5

CursorAdapter は、他のリスト アダプターとは少し異なる動作をします。getView() ではなく、newView() と bindView() で魔法が発生するため、getView() はオーバーライドする適切なメソッドではないと思います。

最初の行が作成された後、CursorAdapter は bindView() が新しいデータを挿入し、既に膨張した行を再利用することを期待し、getView() がそれを行うことを期待しているため、1 つの結果しか得られない場合があります。

コードを newView() に移動してビューを拡張し、 bindView() に移動して実際の行を設定するロジックを実行することをお勧めします。

頑張って、結果を更新してください。

于 2009-08-21T21:42:26.443 に答える
0

getCursor() メソッドによって返されたカーソルがテーブルのすべての行を正しく取得していると推測しています。行のデータにアクセスする前にカーソルを特定の位置に明示的に移動する必要があるため、 getView() メソッドの先頭で電話する必要があります。

cursor.moveToPosition(position);
于 2009-08-21T12:18:32.410 に答える