0

現時点では少し立ち往生しています。同様の質問が寄せられていることは知っていますが、役立つものを見つけることができませんでした。

Androidアプリケーション内の内部データベースからListViewに表示する画像を取得しようとしています。141 行のデータベースがあり、各行には 1、2、または 3 のラベルが付いています。1、2、または 3 に応じて表示するには、別の png 画像 (res/drawable フォルダーに保存) が必要です。クエリ。どんなアドバイスでも大歓迎です。必要な情報を表示するためのより良い方法があるかもしれません。

   public void whosnext(View view) {
    // || is the concatenation operation in SQLite
    cursor = db.rawQuery("SELECT * FROM eventsv1 WHERE start_time > (DATETIME('now')) AND title LIKE ? ORDER BY date ASC, time DESC", 
                    new String[]{"%" + searchText.getText().toString() + "%"});
    adapter = new SimpleCursorAdapter(
            this, 
            R.layout.artist_list_item, 
            cursor, 
            new String[] {"title", "time", "date", "title3", "style"}, 
            new int[] {R.id.title, R.id.time, R.id.date, R.id.title3, R.id.style});
    setListAdapter(adapter);
}
4

2 に答える 2

1

カスタムの CursorAdapter を作成します

public class WhosNextAdapter extends CursorAdapter
{
    public WhosNextAdapter(Context context, Cursor cursor, boolean autoRequery) {
        super(context, cursor, autoRequery);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        //This is were you would check your cursor for style (I think that is 1,2,3 your column)
        int style = cursor.getInt(cursor.getColumnIndex("style"));

        ImageView img = (ImageView) view.findViewById(R.id.yourImageViewId);

        switch (style) {
            case 1:
                img.setImageResource(R.drawable.yourImageForStyle1);

            break;
            case 2:
                img.setImageResource(R.drawable.yourImageForStyle2);

            break;

//etc.
        }
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        //Inflate layout R.layout.artist_list_item

        //Call bindView passing inflated layout, context, and cursor

        //return layout
    }
}
于 2011-06-27T17:06:35.450 に答える
0

間違いなく拡張する必要がありSimpleCursorAdapter、アイテムのレイアウトが十分に単純な場合は、データベースから提供された値を変換してオブジェクトのメソッドsetViewImage()を呼び出すsetImageResource()メソッドをオーバーライドするだけです。ImageViewそうすれば、添付されたコードを大幅に変更する必要がなくなります。

public class MySimpleCursorAdpater extends SimpleCursorAdapter {

    public MySimpleCursorAdpater(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);
    }

    @Override
    public void setViewImage(ImageView v, String value) {
        /*your code to convert value from database to drawable resource id*/
        v.setImageResource(resourceId);
    }

}
于 2011-06-27T18:10:10.823 に答える