ローダーの作成
ローダーを使うには、
FragmentActivityクラスのサブクラスを作成する
ローダーとは、ActivityやFragmentで
非同期にデータをロードする仕組みのこと
データを監視して、コンテンツが変化したら新しい結果を返す
WebでAjaxとかやってるとイメージしやすい
今回は、非同期でブックマーク履歴を読み込んで表示
ブックマークの取得には権限が必要
この権限は
READ_HISTORY_BOOKMARKS
になるので、
AndroidManifest.xmlへ権限を追記する
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
を追加
次に、レイアウトファイルの作成
<RelativeLayout xmlns:android="http://schemes.android.com/apk/res/android" xmlns:tools="http://schemes.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"> </ListView> </RelativeLayout>
次に、FragmentActivityクラスのサブクラスを作成し
LoaderCallbacksインターフェースを実装する
onCreate()をOverrideして
ListViewクラスを生成し
Adapterの指定とローダーの初期化をする
それから、LoaderCallbacksインターフェースの実装となる
これには
onCreateLoader()
onLoadFinished()
onLoadReset()
を使う
まずは、メンバ変数の定義
private SimpleCursorAdapter adapter;
次に、onCreate()のOverride
@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, new String[]{Browser.BookmarkColumns.TITLE}, new int[] {android.R.id.text} ,0); ListView listview = (ListView)findViewById(R.id.list); listview.setAdapter(adapter); getSupportLoaderManager().initLoader(0,savedInstanceState,this); }
次に、onCreateLoader()の実装
@Override public Loader<Cursor> onCreateLoader(int id, Bundle args){ return new CursorLoader(this,Browser.BOOKMARKS_URI,null,null,null,null ); }
そして、onLoadFinished()の実装
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor){ adapter.SwapCursor(cursor); }
そして、onLoadReset()の実装
@Override public void onLoadReset(Loader<Cursor> loader){ adapter.setCursor(null); }
今回、LoaderCallbacksインターフェースの
onCreateLoader()では
Browser.BOOKMARKS_URIで
ブックマークのURIを指定してるけど
電話帳などの
ContentProviderのURIの指定もできる