@blog.justoneplanet.info

日々勉強

CursorからAdapterを生成する

■実装

以下のようにすることでListActivityで使うadapterをcursorから直接生成できる。

SQLiteDatabase sdb = getReadableDatabase();
Cursor cursor = sdb.query(
        "table",
        new String[]{"_id", "name", "address", "created"},
        null,
        new String[]{},
        null,
        null,
        "created DESC",
        null
);

// Cursorを元にしてListActivity用のadapterを生成する
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
        mContext,
        R.layout.list,
        cursor,// datasource
        new String[]{"name", "address"},// データベースカラム名...(a)
        new int[]{R.id.list_face, R.id.list_tag}// (a)に対応するTextViewのid
);

上述の方法ではSQLiteで取得したデータになんらかの文字列を加えたりすることはできない。

■表示データの加工

以下のようにSimpleCursorAdapterクラスを継承することでデータを加工して表示できる。

static class ArrangeListAdapter extends SimpleCursorAdapter {
    public ArrangeListAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        setViewBinder(new ArrangeListViewBinder());
    }
    
    static class ArrangeListViewBinder implements SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if (columnIndex == cursor.getColumnIndex("name")) {// nameの時に文字列を付加する
                String p = cursor.getString(columnIndex);// viewにはまだattachされていないのでcursorから取得
                ((TextView) view).setText(p + " さん");
                return true;
            }
            return false;
        }
    }
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment