@blog.justoneplanet.info

日々勉強

SimpleCursorTreeAdapterのgetChildrenCursorが生成時にも実行される

android 2.3未満で起こった挙動のメモ。android 2.3以降では起こらない。

メモ

以下のようにして開閉可能なListActivityを定義する。

public class KaomojiFavorite extends ExpandableListActivity implements FavoriteHelper.Listener {
    private FavoriteHelper favoriteHelper;
    private CategoryHelper categoryHelper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getExpandableListView().setCacheColorHint(0);// scroll時の背景
        
        // カテゴリを取得
        categoryHelper = new CategoryHelper(getApplicationContext(), null);
        Cursor categoryCursor = categoryHelper.getCursor();
        startManagingCursor(categoryCursor);
        
        // お気に入りを取得してlistにセット
        favoriteHelper = new FavoriteHelper(getApplicationContext(), null);
        ExpandableListAdapter adapter = favoriteHelper.getSimpleAdapter(this, categoryCursor);
        setListAdapter(adapter);

    }

カテゴリ毎にお気に入りを表示する仕組みだ。FavoriteHelperクラスの実装は以下のようになっている。

    public ExpandableListAdapter getSimpleAdapter(Listener listener, Cursor categoryCursor)
    {
        mListener = listener;
        ExpandableListAdapter adapter = new ExpandableListAdapter(
                mContext,
                categoryCursor,
                R.layout.category,
                new String []{"_id", "name"},
                new int []{R.id.list_id, R.id.list_category},
                R.layout.list,
                new String []{"item", "_id"},
                new int []{R.id.list_item, R.id.list_id}
        );
        return adapter;
    }
    
    /**
     * categoryデータ(Cursor)を元にしてExpandableListActivity用のAdapterを生成する
     * @author justoneplanet
     */
    public class ExpandableListAdapter extends SimpleCursorTreeAdapter {
        
        public ExpandableListAdapter(Context context, Cursor groupCursor,
                int groupLayout, String[] groupFrom, int[] groupTo,
                int childLayout, String[] childFrom, int[] childTo) {
            super(context, groupCursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo);
        }
        
        /**
         * カテゴリ用のCursorからIDを取得して子データを検索取得する
         * android 2.2以前ではアプリ起動時にも実行される
         */
        @Override
        protected Cursor getChildrenCursor(Cursor groupCursor) {
            final long idCategory = groupCursor.getLong(groupCursor.getColumnIndex("_id"));
            SQLiteDatabase sdb = getReadableDatabase();
            Cursor cursor = sdb.query(
                    "favorite",
                    new String[]{"_id", "id_category", "item"},
                    "id_category = ?",
                    new String[]{String.valueOf(idCategory)},
                    null,
                    null,
                    null,
                    null
            );
            mListener.onGetChildrenCursor(cursor);
            return cursor;
        }
    }

以上。めも。

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

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment