我setTextFilterEnabled
用于文本过滤ListView
。过滤工作正常,但在键入时会出现一个显示过滤器文本的弹出窗口。见图:
如何隐藏此弹出窗口或更改其在屏幕上的位置?
答案 0 :(得分:4)
我在这个博客上找到了对我有用的更简单的解决方案:
http://blog.jamesbaca.net/?p=128
当您创建ArrayAdapter
以填充ListView
时,只需存储对其过滤器的引用,然后您只需修改ArrayAdapter
上的过滤器而不是ListView
。
*在Xamarin中,您可以使用arrayAdapter.InvokeFilter("my text");
答案 1 :(得分:3)
创建过滤器,(您可能正在使用其他适配器)
ContentAdapter adapter = new ContentAdapter(this, android.R.layout.simple_list_item_1,
s);
list1.setAdapter(adapter);
Filter f = adapter.getFilter();
然后在'onQueryTextChange'中使用过滤器,而不是注释代码
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
//list1.clearTextFilter();
f.filter(null);
} else {
//list1.setFilterText(newText.toString());
f.filter(newText);
}
return true;
}
答案 2 :(得分:1)
Filter.publishResults(CharSequence约束,Filter.FilterResults结果)可能是弹出的。因此,您可能需要子类化Filter并覆盖它。
最好的问候。
答案 3 :(得分:0)
正如Vatsal所说,你可以从适配器创建一个过滤器。所以我解决这个问题的方法是我创建了一个ArrayAdapter作为类变量。
// ...
private void setListAdapter() {
List<Word> words = Dictionary.getInstance(this).getWords();
arrayAdapter = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
words);
// Sets the List Adapter that we are using
this.setListAdapter(arrayAdapter);
}
// ...
然后从onQueryTextChange或onQueryTextSubmit中的这个类变量中你可以得到像这样的过滤器
//...
public boolean onQueryTextChange(String query) {
// By doing this it removes the popup completely which was arising from using the this.getListView().setFilterText(query) method
arrayAdapter.getFilter().filter(query);
return true;
}
//...