0

我正在制作一个用于管理项目的 Android 应用程序。我的项目表中的每个项目都有一个值为 0(计划)、1(当前)或 2(已完成项目)的 project_status 列。

在我的应用程序的一个片段中,我向用户概述了他拥有每种类型的项目数量。

所以例如

24 已完成 3 当前 10 计划中

我正在使用内容提供程序与我的数据库进行交互。目前,我可以使用此代码(普通加载器)获得 3 种状态之一的单次计数:

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
  return new android.support.v4.content.CursorLoader(this.getActivity(), ProjectDbProvider.CONTENT_URI, new String[] {"count(*) AS count"}, ProjectsTable.COLUMN_STATUS_PROJECT + "=?", new String[] {"2"}, null);
}

当它被加载时,我有这个代码来获取计数:

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
    TextView textViewFinished = (TextView) getActivity().findViewById(R.id.btn_proj_finished);
    cursor.moveToFirst();
    String count = String.valueOf(cursor.getInt(0));
    textViewFinished.setText(count);
}


这完美地工作。
现在我只是想知道同时获得所有 3 个状态的计数的最佳方法/最佳实践是什么?我应该只加载我所有项目的普通光标(不计数)并在我的 onloadfinished 中对其进行迭代吗?或者我应该制作 3 个装载机(或者这对设备要求太多了吗?)。或者我应该在我的内容提供者中处理这个?

提前致谢。

4

1 回答 1

1

你自己回答了。您只需创建 3 个不同的加载器。设备的重量非常轻。当然,最好的办法是尽量减少对数据库的查询,但 Android 已经尽量减少了处理 SQLite 数据库查询的工作量。

旁注:为了透明,我会选择 - 在我看来 - 只创建三个加载器来查询 where 子句的所有实例,而不是计数。如果你这样做,你会得到一个 Cursor 作为回报,你可以做 cursor.getCount() 来获取计数。同样,您的设备不会受到严重影响,并且您将拥有更透明的方式来处理您的内容。

于 2013-05-26T13:15:11.993 回答