我有一个 ListView
和一个 EditText
。我在 EditText
上实现了 addTextChangedListener
以过滤 ListView
内容。
leftList.setTextFilterEnabled(true);
et_search.addTextChangedListener(filterTextWatcher);
然后 TextWatcher
是:
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (watcherAdapter==null) {
return;
}
watcherAdapter.getFilter().filter(s);
Log.e(TAG, "OnTextChange: " + s + " start: " + start +
" before: " + before + " count: " + count + " adapter: " +
watcherAdapter.getCount());
}
};
条件:
- 我在
ListView
中有 10 个项目。
问题:
- 当我第一次键入第一个字符时,为什么
watcherAdapter.getCount()
在ListVie
w 中返回10
(作为初始值)而不是返回的过滤结果数?watcherAdapter.getCount(
) 在ListView
中显示的结果似乎迟到了。 - 当我在
EditText
上键入时没有匹配结果时,如何在ListView
中显示“No Result”
?<
最佳答案
将 TextView 添加到您的布局中,在列表上方或下方显示消息的位置会更清晰:
<TextView
android:id="@+id/noResultsFoundView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="No result"
android:visibility="gone"
/>
当您有结果时,您将可见性设置为 GONE。当您没有结果时,您将其设置为 VISIBLE。
要监听这个你可以实现一个自定义过滤器或者至少覆盖方法
publishResults(CharSequence constraint, FilterResults results)
来自 Filter,在 FilterResults 参数中传递正确的更新计数。
在 publishResults 中,您从 Activity 中调用一个方法来更新 noResultsFoundView 的可见性。您访问 Activity 的方式取决于过滤器的位置。如果它在 Activity 的内部类中,那就很容易了。否则,例如,您将 Activity 作为参数传递以实例化适配器,并将其存储为实例变量。
关于android - 如何在可过滤的ListView中显示 "No Result"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147335/