ローダーの作成

ローダーの作成

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です