列表视图与搜索功能

时间:2012-12-16 20:48:53

标签: android

我正在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);
                        }

}

虽然它没有给我任何错误,但搜索也不起作用。当我在搜索edittext中写字时,什么也没发生。哪里出错?

1 个答案:

答案 0 :(得分:0)

您的BaseAdapter应该实现Filterable,您应该在performFiltering()中使用此代码创建自定义Filter类。查看ArrayAdapter的源代码示例。这样,您可以检索结果的子集,但在清除EditText时仍然具有原始数据的副本。

至于onTextChanged()中的逻辑,它看起来很好。虽然您可以使用startsWith()代替equals()substring()