ActiveAndroidをContentProvider経由で使うためのメモです。
時間あれば丁寧にまとめ直したい。
公式ドキュメント
https://github.com/pardom/ActiveAndroid/wiki/Using-the-content-provider
あまり情報が載っていません。
実際に使おうとすると色々準備することがあります。
ライブラリ
公式ドキュメントにはテーブルのユニークなIDのカラム名を
Id
から_id
に変えるよう指示があります。
しかし、Githubにある最新のmaster branchには
現在IDを変えるアノテーションが実装されていません。
なので、ここのツリーからソースを落としてjarを生成してください。
https://github.com/dirong/ActiveAndroid/tree/921c703e7181fcecae6f07d5d46b7249c3fdcbc5
既にTableを生成してしまっている場合は別途DBのマイグレーションが必要です。
AndroidManifest
<provider
android:name="com.activeandroid.content.ContentProvider"
android:authorities="APKのパッケージ名" />
ContentProviderを使うためこれを追記します。
カーソル取得
getActivity().getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle cursor) {
return new CursorLoader(getActivity(),
ContentProvider.createUri(MyEntityClass.class, null),
null, null, null, null
);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
((SimpleCursorAdapter)mySpinner.getAdapter()).swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
((SimpleCursorAdapter)mySpinner.getAdapter()).swapCursor(null);
}
});
このへんはマニュアル通りに。
ここでのモデルのクラス名はMyEntityClass.class
らしい
カーソルからモデルインスタンスを作る
マニュアルはSimpleCursorAdapterを使ってますが、
実際にはCursorAdapterを拡張したりして使うことが多いと思います。
そこでカーソルのまま扱うと大変(ActiveAndroidを使うメリットも少ない)なので
モデルインスタンスをカーソルから作ります
MyEntityClass entity = new MyEntityClass();
entity..loadFromCursor(c);
cは1行分のカーソルです。
CursorAdapterを利用する場合はbindViewの引数がそのまま使えます。