0

我目前正在使用 android API。目前我正在做一些 GUI 数据库绑定,我开始有点恼火。

我有一个简单ListActivity的列表项自定义布局。现在我想将底层绑定ListView到数据库中的一个表。每当我对数据库进行更改时,我都希望能够通知 ListView 刷新自身并更新 GUI。起初,问题看起来很简单:只需添加一个SimpleCursorAdapter,传递一个用于获取数据的游标,将列绑定到布局 id 和你的 down。每当您想要进行刷新时,只需调用notifyDataSetChanged()ListView 即可完成,对吗?不!

事实证明,这种方式将在 UI 线程中查询数据库,这显然是一件坏事,因为它会降低性能并可能导致“应用程序无响应”错误。

目前,看起来唯一的方法是使用 Loaders 和 ContentProviders。这可能是处理数据访问的最抽象和最简洁的方式,但它也添加了大量代码(尤其是在 ContentProvider 本身中,您必须为“解析”请求做很多丑陋的 if-else switch-case 处理)。

所以我的问题是:将数据库表连接到 ListView(或任何其他 UI 组件)的最新技术(并且向后兼容 API 级别 <11)方法是什么?我真的必须使用 ContentProvider 吗?

为什么这么复杂?即:扫描蓝牙设备可以用大约 20 行代码来实现,但是(从我的角度来看)更常见的事情,比如 data-ui-connection,你必须实现至少两个类,每个类 100+ loc。这太疯狂了!

4

1 回答 1

0

...但它也添加了大量代码(尤其是在 ContentProvider 本身中,您必须为“解析”请求做很多丑陋的 if-else 切换案例处理)。

我不明白为什么会这样。Loaders实现in a SimpleCursorAdapterfor a所需的代码ContentProvider是实例化 a CursorLoaderin 并onCreateLoader交换接口Cursor的其他两个回调中返回的值LoaderManager.LoaderCallbacks。在提供程序中,您只需要setNotificationUriCursor.

我真的必须使用 ContentProvider 吗?

如果您想在CursorLoader修改数据库后从刷新数据中受益,是的。您始终可以自己处理问题并自己进行查询。

于 2012-12-10T10:46:01.980 回答