我正在使用FragmentActivity中的ListFragment與SimpleCursorAdapter和修改的CursorLoader.修改的CursorLoader隻是發出rawQueries – 沒有其他更改.
在FragmentActivity中的某個時刻,我需要重新擷取ListFragment中的ListView的資料/遊标.
我怎樣才能做到這一點?
提前謝謝了.
這是FragmentActivity調用ListFragment中的一個方法:
public class ActivityList extends FragmentActivity {
@Override
protected void onActivityResult(final int requestCode,final int resultCode,final Intent intent) {
...
processUpdateList();
}
...
private void processUpdateList() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentlist);
if (fragment != null) {
((FragmentList) fragment).requeryList();
}
}
}
這裡是ListFragment,該方法應該啟動ListView的重新查詢,重新加載或重新繪制. ListView.invalidate()沒有幫助 – 它沒有更改顯示的資料.
public class FragmentList extends ListFragment implements LoaderManager.LoaderCallbacks {
private SimpleCursorAdapter adapter;
private Context context;
private ListView listView;
public void requeryList() {
// listView.invalidate(); didn't re-query
// TODO: How???
}
@Override
public void onActivityCreated(final Bundle bundle) {
super.onActivityCreated(bundle);
context = getActivity().getApplicationContext();
listView = getListView();
getActivity().getSupportLoaderManager().initLoader(MyConstants.LDR_TABLE1LIST,null,this);
adapter = new SimpleCursorAdapter(context,R.layout.fragmentlist_row,new String[] { Table1.DESCRIPTION },new int[] { R.id.fragmentlist_row_description },CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);
setListShown(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
@Override
public Loader onCreateLoader(final int id,final Bundle bundle) {
MyCursorLoader loader = null;
switch (id) {
case MyConstants.LDR_TABLE1LIST:
loader = new MyCursorLoader(context,MysqLiteOpenHelper.TABLE1_FETCH,null);
break;
}
return loader;
}
@Override
public void onLoaderReset(final Loader loader) {
adapter.swapCursor(null);
}
@Override
public void onLoadFinished(final Loader loader,final Cursor cursor) {
adapter.swapCursor(cursor);
setListShown(true);
}
}