3

LoaderManagerとCursorLoaderを使用するようにAndroidアプリケーションを変換しようとしています。基本的に、ADDRESS列とDISTANCE列を含むSQLiteデータベースがあり、列の値をListView行にロードしたいと思います。

今、私は多くの調査を行いました、そしてすべてがこのチュートリアルを指します:http: //mobile.tutsplus.com/tutorials/android/android-sdk_content-providers/

これは素晴らしいチュートリアルですが、まだ理解していないことがいくつかあります。主に、「new CursorLoader()」に渡されるコンテンツURIを構築するにはどうすればよいですか?デバイスの連絡先などの外部データを使用していません。

以下の私のコードをご覧ください。BASE_URIの値を生成する方法について混乱しています。

public class FavoritesFragment extends ListFragment implements
    LoaderManager.LoaderCallbacks<Cursor> {

SimpleCursorAdapter mAdapter;

static final String[] FAVORITES_SUMMARY_PROJECTION = new String[] {
        MyApplication.COLUMN_ID, MyApplication.COLUMN_ADDRESS,
        MyApplication.COLUMN_DISTANCE, };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mAdapter = new SimpleCursorAdapter(getActivity(),
            R.layout.locations_list_row, null, new String[] {
                    MyApplication.COLUMN_ADDRESS,
                    MyApplication.COLUMN_DISTANCE }, new int[] {
                    R.id.address2, R.id.distance }, 0);
    setListAdapter(mAdapter);

    getLoaderManager().initLoader(0, null, this);
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // Insert desired behavior here.
}

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    return new CursorLoader(getActivity(), ***BASE_URI***,
            FAVORITES_SUMMARY_PROJECTION, null, null, null);
}

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mAdapter.swapCursor(data);
}

public void onLoaderReset(Loader<Cursor> loader) {
    mAdapter.swapCursor(null);
}

}
4

1 に答える 1

7

BASE_URIは、でstatic Uri定義する必要がありますContentProvider。これを使用すると、クエリ/更新/挿入/その他を行うときContentProviderに、UriMatcherこれもで定義され、ステートメントを使用できるようになりますContentProvider(例の例のように)。そのチュートリアルのメソッド)データベース内の正しいテーブルに適切なクエリを設定します。データベース内のテーブルごとに異なるものを定義する必要があります。IntegerSwitchquery()BASE_URI

そのチュートリアルを見ると、彼らは:でシングルを定義していUriますContentProvider

private static final String TUTORIALS_BASE_PATH = "tutorials";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
        + "/" + TUTORIALS_BASE_PATH);

ContentProviderで、の値を、指定したADDRESS列とDISTANCE列を含むテーブルの名前に変更する必要がありTUTORIALS_BASE_PATHます"tutorials"。コンストラクCursorLoaderターコードは次のようになります。

return new CursorLoader(getActivity(), YourContentProvider.CONTENT_URI,
            FAVORITES_SUMMARY_PROJECTION, null, null, null);

完全を期すために、変数名をよりわかりやすいように変更する必要があります。したがって、 TUTORIALS_BASE_PATHandではなく、andCONTENT_URIのようなものに変更する必要がLOCATIONS_BASE_PATHありLOCATIONS_URIます。

于 2012-02-20T04:52:50.433 に答える