SearchView
是一个设计标准,但有一个bug,其中OnCloseListener
(我通常将代码搜索而不进行过滤)不会被调用。
>
如果您只想在onQueryTextSubmit
而不是onQueryTextChange
中执行搜索,则会出现此问题
当查询字符串为空时,不会调用前者,并且我不想在用户删除它时仅搜索其他内容时进行搜索 - 只有在故意删除文本过滤时才会进行搜索。
我正在使用setIconifiedByDefault(true)
,因为设计需要一个始终可见的搜索栏 - 但即使不是这种情况,onClose()
仅在您'图标化'SearchView时调用< strong> second 点击'x'图标。
什么是最好的解决方案?最好不要在SearchView等上添加自定义视图
答案 0 :(得分:0)
解决方法:创建覆盖SearchView的自己的视图,按下时执行搜索。仅在搜索字符串为空但最后执行的搜索使用非空字符串时才可见(否则不需要)。
<RelativeLayout>
<SearchView
android:id="@+id/search" />
<ImageView
android:id="@+id/clear"
android:layout_width="@dimen/someValue"
android:layout_height="0dip"
android:layout_alignTop="@id/search"
android:layout_alignBottom="@id/search"
android:layout_alignRight="@id/search"
android:scaleType="fitCenter"
android:visibility="gone"
android:src="@drawable/someIcon" />
</RelativeLayout>
// assign to the overlaying ImageView
class OnClearClickListener implements View.OnClickListener{
@Override
public final void onClick(View v) {
View clear = findViewById(R.id.clear);
clear.setVisibility(View.GONE); // hide, just did its job
performSearch();
}
}
// assign to SearchView
class OnFilterQueryTextListener implements OnQueryTextListener {
@Override
public boolean onQueryTextChange(String newText) {
boolean hide = newText != null && newText.length() > 0 ||
!lastSearchUsedFilter(); // check value stored on successful response
findViewById(R.id.clear).setVisibility(hide ? View.GONE : View.VISIBLE);
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
findViewById(R.id.clear).setVisibility(View.GONE);
performSearch();
return false;
}
});