天天看點

android fragment listview,android – 如何從FragmentActivity更新ListFragment中的ListView?

我正在使用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);

}

}