Hello Android开发者,
我遇到了Android SearchView小部件的问题。我要做的是将“实时”文本过滤器附加到我的ListView(文本输入自动刷新过滤器结果)。它的工作原理很好,并且用这些代码在ListActivity上工作并没有太大的努力:
private SearchView listFilter;
this.listFilter = (SearchView) findViewById(R.id.listFilter);
this.listFilter.setOnQueryTextListener(this);
this.listFilter.setSubmitButtonEnabled(false);
this.getListView().setOnItemClickListener(this);
this.getListView().setTextFilterEnabled(true);
// from OnQueryTextListener
public boolean onQueryTextChange(String newText) {
if (newText.isEmpty()) {
this.getListView().clearTextFilter();
} else {
this.getListView().setFilterText(newText);
}
return true;
}
这里是xml小部件声明
<SearchView
android:id="@+id/listFilter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="enter text to filter" />
现在我的问题是,每当我在SearchView中输入文本时,会立即弹出一个奇怪的文本字段,显示与我刚刚输入的文本相同的文本,因为我可以在SearchView本身看到我的输入并且它部分阻止我的列表条目上的视线,这只是令人讨厌。
有没有办法阻止在输入SearchView时弹出该文本字段?我在xml定义的小部件选项和java类引用上都找不到任何属性。
我知道还有另一种方法可以通过使用EditText和TextWatcher来提供过滤功能,但是我必须自己处理过滤,并且无法从为我处理它的SearchView中获利。
任何建议都表示赞赏。 最好的问候
菲利克斯
答案 0 :(得分:5)
我发现了如何摆脱那个丑陋的弹出窗口。诀窍是直接使用过滤器。下面的代码假定您已在customAdapter中实现了可过滤。
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
m_listView.clearTextFilter();
} else {
ContactsAdapter ca = (ContactsAdapter)lv.getAdapter();
ca.getFilter().filter(newText);
//following line was causing the ugly popup window.
//m_listView.setFilterText(newText);
}
return true;
}