用 cursorLoader加载数据库 需要数据库提供的Uri 可以实现动态加载随着数据库改变自动更新UI
步骤:
public class MainActivity extends Activity {
private ListView lv;
private LoaderManager manager;
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.lv);
manager = getLoaderManager(); //得到loaderManager
manager.initLoader(5, null,callbacks); //用loaderManager初始化一个loader:三个参数分别是这个loader的ID null 回调方法
}
@SuppressLint("NewApi")
private LoaderManager.LoaderCallbacks<Cursor> callbacks = new LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = Uri.parse("content://sms/");
CursorLoader loader = new CursorLoader(MainActivity.this, uri, null, null, null, null);
return loader;//第一个回调方法是:得到cursorLoader 参数是查询数据库的条件 排序
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
List<String> list = new ArrayList<String>();
while(cursor.moveToNext()){
String data = cursor.getString(cursor.getColumnIndex("body"));
list.add(data);
}
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list));
//这个方法主要是更新UI的操作 会自动更新
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
};
@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;
}
}