1

我很困惑,我需要你的帮助。我尝试按照 Virgil Dobjanschi 在 Google IO 2010 上的“开发 Android REST 客户端应用程序”讲座中给出的说明进行操作。不幸的是,我找不到在 Content Provider 和 Cursor Adapter 之间实现有效通信的方法。

我在这里遇到的问题与光标适配器有关,所以我们假设内容提供者一切正常。例如,让我们尝试使用 Contacts ContentProvider 而不是我自己的。我尝试了最简单的解决方案——任何 ContentProvider(假设为联系人,由 SDK 提供)和 SimpleCursorAdapter。问题是 SimpleCursorAdapter 包含来自 Contacts 的光标的构造函数已被弃用。文档说:

此构造函数已弃用。

不鼓励使用此选项,因为它会导致在应用程序的 UI 线程上执行游标查询,从而导致响应速度不佳甚至应用程序无响应错误。作为替代方案,将 LoaderManager 与 CursorLoader 一起使用。

我的想法是:“好吧,我不会使用它。我会尝试用 CursorLoader 代替 LoaderManager,因为他们正在建议我。” 所以我去LoaderManager 文档站点查找使用示例以及我发现了什么?使用 SimpleCursorAdapter 构造函数的完美示例。是的,我也想避免因为它已被弃用。

    // Create an empty adapter we will use to display the loaded data.
    mAdapter = new SimpleCursorAdapter(getActivity(),
            android.R.layout.simple_list_item_2, null,
            new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
            new int[] { android.R.id.text1, android.R.id.text2 }, 0);
    setListAdapter(mAdapter);

我能找到的所有教程都在使用这个已弃用的构造函数。谁能给我一个很好的答案,避免使用它的正确方法是什么?还是我太在乎它了?我只想学习好的做法...

4

1 回答 1

1

如果您LoaderManager在 Android 2.2 上使用,我假设您的项目中已经有 Android 兼容性库。

在这种情况下,不要使用

android.widget.SimpleCursorAdapter

因为该类只有一个现在已弃用的构造函数。而是使用:

android.support.v4.widget.SimpleCursorAdapter

来自兼容库。它有两个构造函数:

SimpleCursorAdapter(Context, int, Cursor, String[], int[]) // deprecated
SimpleCursorAdapter(Context, int, Cursor, String[], int[], int) // non-deprecated

您问题中的代码示例使用第二个未弃用的构造函数,因此必须使用兼容的 .lib 版本SimpleCursorAdapter

于 2011-10-02T14:03:08.497 回答