1

この件はあまり詳細に議論されていないようですので、私の状況をできるだけ明確に説明し、うまくいけばいくつかの説明が得られるようにします.

私のアプリでは、ユーザーは場所に関する情報を取得できます。場所のカテゴリ (食品/ファーストフード、レストラン、... または店舗/ショップなど) に対応するさまざまなボタンを備えたさまざまなメニューがあります。ユーザーが選択したボタンをクリックすると、データベースにリクエストが送信され、結果がリストビューに表示されます。このように:
ここに画像の説明を入力 これは一例ですが、このように16の可能性があり、毎回同じアクティビティ(ResultListViewActivity)を開くが、異なるコンテンツを表示しています。

ユーザーがより正確な調査を行えるようにしたいので、写真 3 に示すようにフィルター モードがあります。表示されるウィンドウで、さらにいくつかの基準を選択できます。これまでに計画したことは、ユーザーが何かをクリックするたびに何らかの変数を埋めることでした。彼がクレジット カードで支払うことを選択した場合、VALUECARD = X、予算 = 何かの場合、VALUEBUDGET = Y などのように、[OK] をクリックすると、データベースにクエリを実行するメソッドにすべてのバリュー パッケージが送信され、新しいリストビューが開きます。結果。それは間違いなくうまくいくでしょう、そして私はその方法を知っています。しかし、データベースを毎回クエリするのは本当に良い方法ではないと思います。リストビューで直接検索してみませんか?

私のメソッドはリストビューを表示するように機能しているため (図 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 に答える