ローダーの作成
ローダーを使うには、
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の指定もできる