gpt4 book ai didi

android - 如何从 FragmentActivity 更新 ListFragment 中的 ListView?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:35 26 4
gpt4 key购买 nike

我在 FragmentActivity 中使用 ListFragment 以及 SimpleCursorAdapter 和修改后的 CursorLoader。修改后的 CursorLoader 仅发出 rawQueries - 没有其他更改。

在 FragmentActivity 中的某个时刻,我需要重新获取为 ListFragment 中的 ListView 提供数据/游标。

我该怎么做?

非常感谢。

这是调用 ListFragment 中的方法的 FragmentActivity:

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<Cursor> {

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,
null,
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<Cursor> 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<Cursor> loader) {
adapter.swapCursor(null);
}

@Override
public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
adapter.swapCursor(cursor);

setListShown(true);
}
}

最佳答案

尝试调用方法 restartLoader(MyConstants.LDR_TABLE1LIST, null, this); 刚刚在您的 requeryList() 方法中提供的 LoaderManager

关于android - 如何从 FragmentActivity 更新 ListFragment 中的 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com