我正在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中写字时,什么也没发生。哪里出错?
答案 0 :(得分:0)
您的BaseAdapter应该实现Filterable,您应该在performFiltering()
中使用此代码创建自定义Filter类。查看ArrayAdapter的源代码示例。这样,您可以检索结果的子集,但在清除EditText时仍然具有原始数据的副本。
至于onTextChanged()
中的逻辑,它看起来很好。虽然您可以使用startsWith()
代替equals()
和substring()
。