- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 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 。
最佳答案
老问题,但也许答案对某人有帮助。
下面是一些示例代码:
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/
我正在使用 LoaderManager.LoaderCallbacks在我的 FragmentActivity . 我在 onResume() 中调用: getSupportLoaderManager
嗨,请有人帮忙,我正在尝试创建一个基本的加载程序。我见过的有关加载器的所有文档都涉及以下内容: public class MyActivity extends Activity
我创建了一个从 AsyncTaskLoader 派生的加载器。它在 99% 的时间都有效,但存在一种极端情况,即在 AsyncTaskLoader.loadInBackground() 成功返回后未调
我注意到使用 Android 加载器和 fragment 的奇怪情况。当我在方向更改后调用 LoaderManager.initLoader() 时,不会调用 onLoadFinished (尽管文档
我在项目中遇到了 LoaderCallbacks 问题。我已经在 android studio 中实现了 LoaderManager 。每当用户按下搜索按钮时,我都会尝试重新启动加载程序。 publi
我正在使用 FragmentPagerAdapter 来实现选项卡式界面。我的第 0 个 fragment 在创建时创建了一个加载器,并尝试在 onActivityCreated() 中重新连接到加载
我正在对 AsyncTaskLoader 进行一些实践阅读,因此我可以使用该技术来加载联系人列表。代码唯一有效的时间是当我从扩展 Fragment 的类实现回调时如 MyLoader extends
我有一个使用两个加载器的 Activity 。他们每个人都返回不同类型的数据。要从单个加载器获取数据,只需实现 LoaderCallbacks进入 Activity 。我想我可以实现 LoaderCa
对于提供 LoaderManager 的 Activity 的生命周期,是否有关于何时调用 LoaderCallbacks.onLoadFinished() 的规则? 我从 Android 文档中知道
我是安卓新手。我想使用 loaderCallbacks 获取 contacts 数据我写了一些代码,但这里有一些问题,我不知道为什么会这样你能检查一下吗? package com.example.ar
我有 1 个 Activity 和 2 个 fragment 。这两个 fragment 都使用自定义 AsyncTaskLoader 从 Web 服务获取一些数据,并且由于我使用的是加载器,它应该跨
我有一个 DialogFragment,它为 setMultiChoiceItems 使用 Cursor。此 Cursor 是在 LoaderManager 的帮助下获得的。 使用 onCreateD
我在尝试从实现 LoaderCallbacks 接口(interface)的 Fragment 的 onLoadFinished 方法中显示 DialogFragment 时收到异常。基本上我使用 L
使用 android-support-v4.jar 和 FragmentActivity(此时没有 Fragment) 我有一个 AsyncTaskLoader,我开始加载它,然后在后台线程仍在运行时
我是 Android 应用程序开发的新手。我正在阅读 ToDo教程。本文基于android SDK 3.0及以上版本,但我使用的是sdk 2.1,其中不包含'LoaderManager'类。我想知道
我卡在我的代码中,我正在使用抽屉布局,而在 fragment 布局上,我想在从数据库中获取人员列表后显示它。在 fragment 类中,当我使用游标适配器查询并将其设置为列表适配器时,错误显示: 类型
我在 ListFragment 中使用 CursorAdapter 来加载和显示评论列表。 public class CommentsFragment extends ListFragment imp
我在关注 guide 时遇到问题在 Android 中使用 SQLite。我正在使用 ListFragment而不是 ListActivity (如示例中),所以我有 ListFragment实现Lo
我是一名优秀的程序员,十分优秀!