0

で使用listviewしていBaseAdaptorます。正しく動作していますが、検索機能も適用しています。そのためのコードは次のとおりです

   inputSearch.addTextChangedListener(new TextWatcher() {

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


                            String searchText = inputSearch.getText().toString();
                            int textLength = searchText.length();
                            searchResults.clear();

                            for (int i = 0; i < productList.size(); i++) {
                                String prodName = productList.get(i).get(
                                        TAG_PRODUCT_NAME);
                                if (textLength <= prodName.length()) {
                                    if (searchText.equalsIgnoreCase(prodName
                                            .substring(0, textLength)))
                                        searchResults.add(productList.get(i));
                                }
                            }

                            adapter.notifyDataSetChanged();
                            lstProductList.setAdapter(adapter);
                        }

}

エラーは出ていませんが、検索も機能しません。検索編集テキストに書き込んでも何も起こりません。エラーはどこにありますか?

4

1 に答える 1

0

BaseAdapter は Filterable を実装する必要があり、このコードを使用してカスタム Filter クラスを作成する必要がありますperformFiltering()。例として、 ArrayAdapterのソース コードを見てください。このようにして、結果のサブセットを取得できますが、EditText がクリアされたときに元のデータのコピーが残っています。

その中のロジックはonTextChanged()問題ないようです。と のstartsWith()代わりに使用できますが。equals()substring()

于 2012-12-16T21:00:46.163 に答える