初始化
LoaderManager = loaderManager = getActivity().getSupportLoaderManager();
loaderManager.initLoader(0, null, new ContactsFragment.ContactsCallBack());
调用MySessionCallback这个内部类
private class MySessionCallback implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (id == ID) {
return new CursorLoader(getActivity(), SmsProvider.SESSION_URI, null, "from_account=? or to_account=? group by session_account", new String[]{IMService.CURRENT_ACCOUNT, IMService.CURRENT_ACCOUNT}, "time asc");
} else {
return null;
}
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (adapter != null) {
adapter.getCursor().requery();
//强制异步加载(如requery()过时可用以下方法)
//loader.forceLoad();
return;
}
Log.i(TAG, "onLoadFinished: ");
adapter = new SessionAdapter(getActivity(), data, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
mListView.setAdapter(adapter);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
}
调用CursorAdapter的类实现其中的方法来显示数据:
private class SessionAdapter extends CursorAdapter {
public SessionAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return View.inflate(context, R.layout.item_session, null);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView ivHead = (ImageView) view.findViewById(R.id.head);
TextView tvBody = (TextView) view.findViewById(R.id.body);
TextView tvNickName = (TextView) view.findViewById(R.id.nickname);
String body = cursor.getString(cursor.getColumnIndex(SmsHelper.SmsTable.BODY));
String acccount = cursor.getString(cursor.getColumnIndex(SmsHelper.SmsTable.SESSION_ACCOUNT));
tvBody.setText(body);
tvNickName.setText(acccount);
}
}