package jp.mixi.sample.contentprovider.loader; import android.content.ContentValues; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ListView; /** * Loaderを使用したListViewを表示するサンプルです。 <br> * AdapterにはSimpleCursorAdapterを使用。 */ public class MainLoaderActivity extends FragmentActivity implements LoaderCallbacks<Cursor> { private SimpleCursorAdapter mSimpleCursorAdapter; private ListView mListView; @SuppressWarnings("unused") private static final String TAG = MainLoaderActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.ListView); // UIにバインドするデータのカラム名 String[] from = { Book.COLUMN_NAME_BOOK_TITLE, Book.COLUMN_NAME_BOOK_PRICE }; // 指定したカラムのデータを表示するViewのIDを指定します。 int[] to = { R.id.Title, R.id.Price }; // 第3引数のCursorはコールバックで設定されるのでnullを渡しています mSimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_item_book, null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); mListView.setAdapter(mSimpleCursorAdapter); // ボタンクリックでインサート処理を実行 findViewById(R.id.ADD).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { insert(); } }); // ローダの管理をするオブジェクト LoaderManager loaderManager = getSupportLoaderManager(); // ローダを初期化して非同期処理を開始する loaderManager.initLoader(0, null, this); } private void insert() { ContentValues values = new ContentValues(); for (int i = 0; i < 3; i++) { values.clear(); values.put(Book.COLUMN_NAME_BOOK_TITLE, "TITLE" + i); values.put(Book.COLUMN_NAME_BOOK_PUBLISHER, "PUBLISHER" + i); values.put(Book.COLUMN_NAME_BOOK_PRICE, "PRICE" + i); getContentResolver().insert(Book.CONTENT_URI, values); } } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { // ここでデータの取得条件の指定が可能です。 // CursorLoader (Context context, Uri uri, String[] projection, String // selection, String[] selectionArgs, String sortOrder) return new CursorLoader(this, Book.CONTENT_URI, null, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor c) { // 古いCursorと新しいCursorを入れ替えます。そのため最新のデータが表示されます。 mSimpleCursorAdapter.swapCursor(c); } @Override public void onLoaderReset(Loader<Cursor> cursor) { // 古いCursorと新しいCursorを入れ替えます。そのため最新のデータが表示されます。 mSimpleCursorAdapter.swapCursor(null); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }