0

应该显示相当长的产品代码列表的ListView内容(比如多达 10 万个,即不小)。因此,有效的交互式搜索很重要。由于这里没有解释的原因,过滤器值应该是URI的一部分......

我正在使用 SQLite 表和LoadManagerandCursorLoader方法。每当过滤器字符串发生变化时,游标加载器就会被重置,并onCursorLoader依次调用 。我正在使用这样的代码:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {

    // Compose the URI based on whether the content should be filtered or not.
    // mCurFilter contains the filter value.
    Uri uri;
    if (mCurFilter.isEmpty()) {
        uri = DemoContentProvider.PRODUCTS_CONTENT_URI;
    } else {
        uri = Uri.withAppendedPath(DemoContentProvider.PRODUCTS_CONTENT_FILTER_URI,
                                   Uri.encode(mCurFilter));
    }

    String[] projection = { ProductTable.COLUMN_ID,
                            ProductTable.COLUMN_CODE,
                            ProductTable.COLUMN_NAME,
                            ProductTable.COLUMN_STOCK,
                            ProductTable.COLUMN_PRICE };

    CursorLoader cursorLoader = new CursorLoader(this,
            uri, projection,
            null, null,     // no selection and selargs - filter value inside the URI
            orderInfo);     // info for sorting

    return cursorLoader;
}

请专注于uri构图。这里PRODUCTS_CONTENT_FILTER_URI定义为:

public static final Uri PRODUCTS_CONTENT_FILTER_URI =
        Uri.parse("content://" + AUTHORITY
                   + "/" + ProductTable.CONTENT_PATH + "/filter");

该示例可能看起来像

content://cz.xxx.android.yyydemo.contentprovider/product/filter/abc

abc用户输入的过滤值在哪里。我觉得这个 URI 设计可能不正确(作为该领域的初学者)。对我来说,以下示例是可以的:

content://AUTHORITY/product/     ... to get all products
content://AUTHORITY/product/123  ... to get the product with _id = 123

但是,后缀filter/value是好方法吗?

更新:我最终会有几个相互关联的活动。考虑客户产品订单负责人订单清单备注清单。我是处理数据的类似网络的系统的新手(即应该如何设计 URI 系统)。我想为我的 URI 设计规则,以便它可以是一种通用的。我知道它们只是字符串,我可以以任何方式做到这一点。但我想做得很好:)

例如:如果客户列表变大,用户可能想要过滤该列表。我可能想将过滤表示为 URI 的一部分。产品清单已经很大了。我想对产品使用相同的 URI 结构。现在,订单将客户和产品放在一起。

说,我想显示客户和订单(订单头)的产品列表,以及有关产品订购数量的信息,包括零数量的产品(以便能够将它们添加到订单中) . 这样组合的产品列表与数量是一种类似于普通的产品列表(至少列表中的项目数量相同)——用户可能想要过滤、更改排序等。但是, URI 应包含客户 ID 和订单 ID。添加过滤时,还应将其添加到 URI。我知道我可以简单地使用路径,比如过滤器值/customer/123/order/456/filter/apple在哪里,数字和是路径前一部分表示的表的 id...apple123456

从另一个角度来看——对于前面的例子——客户 ID、订单 ID 和过滤器值可以用作键值对,分别是'custome''order''filter'。此外,我不知道将来会添加什么。

我想从正确的应用程序 URI 系统开始。我想它必须由其他人完成很多次。你能分享你的经验吗?我想避免以后重新设计它的必要性。

4

1 回答 1

0
  1. 您如何构建它是一个方便的问题。我添加“过滤器”URI 以降低查询的复杂性(例如多个“WHERE”条件、“JOIN”)

  2. ListView 正在重用子视图,因此它可以处理很多事情。适配器过滤器旨在减少适配器中已有的内容。当我们谈论大数据时,我宁愿一开始就不要加载它。

于 2013-08-08T09:42:51.547 回答