gpt4 book ai didi

android - 使用 DialogFragment 处理 LoaderCallbacks 的优雅方式

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:05 24 4
gpt4 key购买 nike

我有一个 DialogFragment,它为 setMultiChoiceItems 使用 Cursor。此 Cursor 是在 LoaderManager 的帮助下获得的。

使用 onCreateDialog 方法处理此问题的最佳方法是什么?加载程序在调用此方法后启动,因此 Cursor 在开始时对 AlertDialog.Builder 不可用。

是否有一种方法可以在调用 onLoadFinished 后更新 Dialog UI?理想情况下,我想设置一个初始加载 UI,一旦 Cursor 可用,然后更新 UI。

我有一个可以正常工作的实现,它只需将 Cursor 从 Fragment 加载到 Activity 中。我不喜欢这个,因为它不是很模块化。我可以编写一个 Fragment 类来填充它自己的 View 并在 Cursor 完成时交换它们,但这看起来也不是很优雅。

由于这更像是一个设计问题,而不是特定的编码问题,因此我省略了示例代码。我正在寻找的答案应该基于如何在 DialogFragment 类中很好地管理这种工作流,使用 AlertDialog.Builder 创建对话框 View 。

最佳答案

老问题,但也许答案对某人有帮助。

  • 在 onCreate()、onCreateView 或 onActivityCreated() 中启动 CursorLoader,在我看来并不重要
  • 在 onCreateDialog 中创建适配器和对话框。对话框将使用空适配器,直到数据加载完毕
  • 在 onLoadFinished 中交换适配器的光标

下面是一些示例代码:

public class MyDialogFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor> {

private CursorAdapter mAdapter;

public static MyDialogFragment newInstance() {
return new MyDialogFragment();
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mAdapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_single_choice, null,
new String[] {FolderColumns.NAME}, new int[] {android.R.id.text1}, 0);

return new AlertDialog.Builder(getContext())
.setAdapter(mAdapter, null)
.create();
}

@Override
public synchronized Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = ...;
return new CursorLoader(getActivity(), uri, null, null, null, null);
}

@Override
public synchronized void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}

@Override
public synchronized void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor != null && !cursor.isClosed()) {
mAdapter.swapCursor(cursor);
}
}

}

注意适配器不能在onCreate中创建,因为onCreateDialog在onCreate之前调用。

关于android - 使用 DialogFragment 处理 LoaderCallbacks 的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633996/

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