1

这个主题似乎没有被详细讨论,所以我将尽可能地解释我的情况,以使其清楚,并希望得到一些解释。

我的应用程序允许用户获取有关地点的信息:有不同的菜单,其中包含与地点类别相对应的不同按钮(食品/快餐、餐馆、...或商店/商店、...等等)。用户单击他选择的按钮,它将向我的数据库发送一个请求并显示一个带有结果的列表视图。这种方式:
在此处输入图像描述 这是一个例子,但有 16 种这样的可能性,每次它打开相同的活动(ResultListViewActivity)但显示不同的内容。

我希望用户能够进行更准确的研究,所以有一个过滤模式,如图 3 所示。出现的窗口允许选择更多标准。到目前为止,我的计划是在用户每次点击某物时填充一些变量。就像他选择用信用卡付款一样,VALUECARD = X,如果预算 = 某物,那么 VALUEBUDGET = Y 等等,当您单击“确定”时,它会将所有价值包发送到查询数据库的方法并打开一个新的列表视图结果。它肯定会起作用,我知道该怎么做。但是我也觉得每次查询数据库都不是什么好方法,为什么不直接在列表视图中搜索呢?

我知道如何查询数据库,因为我的方法正在显示列表视图(见图 2),但我不知道如何查询列表视图,尤其是当我将在我的归档中使用的数据库中的某些列未导入时我的光标,然后在我的列表视图中。我想我首先必须导入我可能需要过滤的每一列。
这是我显示列表视图的方法的代码,因此您可以看到我的光标是如何填充的以及我的适配器是如何制作的:

private void displayListView() {

    // getExtra 
    Bundle bundle = getIntent().getExtras();
    String title = bundle.getString("title", "Choose here :");
    String inInterval = bundle.getString("inInterval");
    Log.d(TAG, "inInterval = " + inInterval);

    poititle.setText(title);
    
    // put the results of the method in a cursor
    Cursor c = dbHelper.findPoiInTable(inInterval);
    String[] columns = new String[] { DatabaseAdapter.COL_NAME,
            DatabaseAdapter.COL_STREET, DatabaseAdapter.COL_WEBSITE,
            DatabaseAdapter.COL_TELEPHONE, DatabaseAdapter.COL_REMARKS,
            DatabaseAdapter.COL_PRICE };
    int[] to = new int[] { R.id.name, R.id.street, R.id.website,
            R.id.telephone, R.id.remarks, R.id.price };
    cursorAdapter = new SimpleCursorAdapter(this, R.layout.poi_info, c,
            columns, to, 0);
    

    ListView listView = (ListView) findViewById(R.id.poilistview);
    // Assign adapter to ListView
    listView.setAdapter(cursorAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        // Comportement des éléments de la listview
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Intent i = new Intent(getApplicationContext(),
                    POIActivity.class);

            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();
            String website = ((TextView) view.findViewById(R.id.website))
                    .getText().toString();
            String telephone = ((TextView) view
                    .findViewById(R.id.telephone)).getText().toString();
            String remarks = ((TextView) view.findViewById(R.id.remarks))
                    .getText().toString();
            String price = ((TextView) view.findViewById(R.id.price))
                    .getText().toString();
            // i.putExtra(ID_EXTRA, name) ;
            i.putExtra(ID_NAME, name);
            i.putExtra(ID_WEBSITE, website);
            i.putExtra(ID_TELEPHONE, telephone);
            i.putExtra(ID_REMARKS, remarks);
            i.putExtra(ID_PRICE, price);
            startActivity(i);
        }

    }); }

在这种特殊情况下,我如何过滤光标中的“COL_PRICE”?更准确地说,在我的过滤器菜单中,当用户设置预算并且我们得到一个值时,如何使用该值与 COL_PRICE 中的值相关并将元素保持在给定值之下?
感谢您提供任何信息!

4

1 回答 1

0

使用当前代码最简单的解决方案是使用向FilterQueryProvider适配器添加一个,但这最终会在您的数据库中启动一个新查询。

如果您真的不想对数据库进行新查询,则必须为您的ListView. 这将比第一个解决方案多得多的工作,而且可能也更慢。

于 2013-03-26T09:11:03.883 回答