0

ここのように、Android ListView に単純な検索フィルターを追加したい:

Search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2,
                int arg3) {

            MainActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
    });

このコードは、インターネットで見つかったチュートリアルからのものです (URL を紛失しました)。これは ArrayAdapter に基づいていますが、私のクラスでは SimpleCursorAdapter を使用しており、このコードは機能しません。つまり、入力はできますが、検索結果はフィルタリングされません。これが私のコードです:

// Create the pointer to the desired data
        dataAdapter = new SimpleCursorAdapter(
                this, R.layout.contact_row, contactsCursor, columns, to, 0);
        ListView listView = (ListView) findViewById(R.id.list);
        Search = (EditText) findViewById(R.id.inputSearch); 

        Search.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                    int arg3) {

                ContactListActivity.this.dataAdapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {

            }

            @Override
            public void afterTextChanged(Editable arg0) {

            }
        });

SimpleCursorAdapter でこのフィルター関数を設定する方法はありますか?

4

1 に答える 1

4
Search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2,
                int arg3) {
            String where = *YOURCOLUMN* + " LIKE '%" + cs + "%'";

            Cursor c = db.query(*TABLE*, *COLUMNS*, where, null, null, null, null);

            dataAdapter.swapCursor(c);
            dataAdapter.notifyDataSetChanged();
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
});

明らかに、独自のデータを入力する必要がありますが、ほとんどの場合、必要なことが行われるはずです。うまくいくことを願っています!

于 2013-07-26T15:37:37.450 に答える