Skip to content

Most visited

Recently visited

navigation

リストビュー

このドキュメントの内容

  1. ローダを使用する

キークラス

  1. ListView
  2. Adapter
  3. CursorLoader

関連ドキュメント

  1. ローダ

ListView は、スクロール可能なアイテムのリストを表示するビューグループです。 Adapter を使用して、配列やデータベース クエリのようなソースからコンテンツを取得し、各アイテムの結果をリストの中のビューに変換することで、リスト アイテムは自動的にリスト内に挿入されます。

アダプタを使用してビューを動的に挿入する方法の概要については、アダプタを使ったレイアウトをビルドするをお読みください。

ローダを使用する

CursorLoader を使用することは、アプリのメイン スレッドがクエリでブロックングされるのを防ぐ目的で、Cursor へのクエリを非同期的なタスクとして実行する標準的な方法です。 CursorLoaderCursor の結果を受信すると、LoaderCallbacksonLoadFinished() へのコールバックを受信します。すると、Adapter が新しい Cursor でアップデートされ、リストビューが結果を表示します。

CursorLoader API は Android 3.0 (API レベル 11)で初めて導入されましたが、サポート ライブラリでも提供されているので、Android 1.6 以降を搭載する端末をサポートするアプリでも使用できます。

Loader を非同期的なデータ読み込みに使用する方法については、ローダのガイドで詳細をご覧ください。

以下の例では、ListActivity を使用しています。このアクティビティは、デフォルトでの唯一のレイアウト要素として ListView を含んでいます。 これにより、連絡先プロバイダにクエリを実行して、名前と電話番号のリストを取得します。

このアクティビティは、リストビューのデータを動的に読み込む CursorLoader を使用する目的で、LoaderCallbacks インターフェースを実装しています。

public class ListViewLoader extends ListActivity
        implements LoaderManager.LoaderCallbacks<Cursor> {

    // This is the Adapter being used to display the list's data
    SimpleCursorAdapter mAdapter;

    // These are the Contacts rows that we will retrieve
    static final String[] PROJECTION = new String[] {ContactsContract.Data._ID,
            ContactsContract.Data.DISPLAY_NAME};

    // This is the select criteria
    static final String SELECTION = "((" +
            ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" +
            ContactsContract.Data.DISPLAY_NAME + " != '' ))";

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

        // Create a progress bar to display while the list loads
        ProgressBar progressBar = new ProgressBar(this);
        progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT, Gravity.CENTER));
        progressBar.setIndeterminate(true);
        getListView().setEmptyView(progressBar);

        // Must add the progress bar to the root of the layout
        ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
        root.addView(progressBar);

        // For the cursor adapter, specify which columns go into which views
        String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};
        int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1

        // Create an empty adapter we will use to display the loaded data.
        // We pass null for the cursor, then update it in onLoadFinished()
        mAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, null,
                fromColumns, toViews, 0);
        setListAdapter(mAdapter);

        // Prepare the loader.  Either re-connect with an existing one,
        // or start a new one.
        getLoaderManager().initLoader(0, null, this);
    }

    // Called when a new Loader needs to be created
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        // Now create and return a CursorLoader that will take care of
        // creating a Cursor for the data being displayed.
        return new CursorLoader(this, ContactsContract.Data.CONTENT_URI,
                PROJECTION, SELECTION, null, null);
    }

    // Called when a previously created loader has finished loading
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        // Swap the new cursor in.  (The framework will take care of closing the
        // old cursor once we return.)
        mAdapter.swapCursor(data);
    }

    // Called when a previously created loader is reset, making the data unavailable
    public void onLoaderReset(Loader<Cursor> loader) {
        // This is called when the last Cursor provided to onLoadFinished()
        // above is about to be closed.  We need to make sure we are no
        // longer using it.
        mAdapter.swapCursor(null);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Do something when a list item is clicked
    }
}

注: このサンプルは、連絡先プロバイダでクエリを実行するので、このコードを使用したい場合は、アプリはマニフェスト ファイルで、次のような READ_CONTACTS パーミッションをリクエストする必要があります。
<uses-permission android:name="android.permission.READ_CONTACTS" />

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.