我的应用包含标准的SearchView小部件。从下面的代码中可以看出,我正在设置OnClickListener,OnCloseListener和OnQueryTextListener。
如果我点按SearchView,它最初会按预期响应。如果我输入文本并按下键盘上的搜索按钮,则OnQueryTextListener会正确触发,并且按照searchView.setIconified(true)关闭键盘。但是,如果我现在再次点击SearchView,则不会触发OnClickListener。键盘仍然出现,字段变得可编辑,但我的OnClickListener中的代码未执行。
如果我使用" X"在此之后关闭搜索视图的图标,一切都恢复正常。下次我点击SearchView时,我的听众就会被解雇。
我有额外的代码,每次点击SearchView时都需要执行。
在这个特定情况下,什么可能导致侦听器无法触发?我还应该在OnQueryTextSubmit中做些什么吗?
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
filterLayout.setVisibility(View.VISIBLE);
searchView.setIconified(false);
System.out.println("on click");
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
filterLayout.setVisibility(View.INVISIBLE);
return false;
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
答案 0 :(得分:1)
我找到了这个问题的半答案。如果我在提交查询时清除searchView的焦点,那么当用户下一次点击searchView时,OnQueryTextFocusChangeListener将获得一个调用。它并没有完全回答我原来的问题,但对我的案例来说,这是一个可接受的解决方法。