SimpleCursorTreeAdapterでLoaderManagerを使う
以下のように実装してみた。
public class ExpandableListAdapter extends SimpleCursorTreeAdapter implements LoaderManager.LoaderCallbacks<Cursor> { private Context mContext; private LoaderManager mManager; public ExpandableListAdapter( Context context, ExpandableListAdapterListener listener, LoaderManager manager, Cursor groupCursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) { super(context, groupCursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); mContext = context; mManager = manager; } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { final long idGroup = groupCursor.getLong(groupCursor.getColumnIndex("_id")); Bundle bundle = new Bundle(); bundle.putLong("idGroup", idGroup); int groupPos = groupCursor.getPosition(); if (mManager.getLoader(groupPos) != null && !mManager.getLoader(groupPos).isReset()) { mManager.restartLoader(groupPos, bundle, this); } else { mManager.initLoader(groupPos, bundle, this); } return null; } @Override public Loader<Cursor> onCreateLoader(int groupPos, Bundle bundle) { long idGroup = bundle.getLong("idGroup"); return new CursorLoader( mContext, Provider.URI, new String[]{Table.ID, Table.ID_GROUP, Table.TITLE, Table.CONTEXT}, Table.ID_GROUP + " = ?", new String[]{String.valueOf(idGroup)}, Table.CREATED + " DESC" ); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { setChildrenCursor(loader.getId(), cursor); } @Override public void onLoaderReset(Loader<Cursor> loader) { } }
getChildrenCursorでnullを返すとsetChildrenCursorが実行されるまで子要素が消えるのが表示上気になる。あと、getChildrenCursorでnullを返すとAndroid 1.6でクラッシュする。
TrackBack URL :
Comments (0)