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 并且您应该使用此代码在performFiltering(). 以ArrayAdapter的源代码为例。这样,您可以检索结果的子集,但在清除 EditText 时仍然拥有原始数据的副本。

至于它的逻辑onTextChanged()看起来不错。虽然您可以使用startsWith()代替equals()substring().

于 2012-12-16T21:00:46.163 回答