【发布时间】:2014-07-18 15:48:18
【问题描述】:
我正在尝试在输入值后清除并关闭 SearchView。我找到了一个解决方案,但它会关闭搜索,如果我再次尝试搜索,它不会执行任何操作。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(searchListener);
return super.onCreateOptionsMenu(menu);
}
SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
try {
searchView.onActionViewCollapsed();
}
catch(Exception ex){
ex.printStackTrace();
System.out.println(ex);
}
return true;
}
};
我只能搜索第一次。每次下一次它只会关闭我的输入键盘,什么也不做。如何以正确的方式执行?
编辑。 建议的更改如下所示:
try {
searchView.setIconified(true);
}
activity_main_actions.xml:
<!-- Search Widget -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView"/>
编辑2:
我更改了showAsAction="always|collapseActionView",但是当我点击搜索时它关闭了我的应用程序。
我还将监听器放在 OnCreateOptionsMenu 中,看看它是否改变了什么:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
searchMenuItem = menu.findItem(R.id.action_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
if (searchMenuItem != null) {
boolean closed = searchMenuItem.collapseActionView();
Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show();
}
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
closed 布尔值是 false - 我不知道为什么。我读了the doc,但它什么也没告诉我。
编辑3:
我在互联网上阅读了太多关于这个主题的内容,但我还不清楚。搜索小部件被清除,键盘被隐藏并执行操作。唯一的问题是搜索没有折叠,因此它覆盖了 ActionBar 上的其余操作按钮。
@Override
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
searchView.clearFocus();
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
return false;
}
Here我读到collapseActionView() 不起作用,因为我的搜索不是视图而是小部件。
【问题讨论】:
-
你为什么不使用 setIconified() developer.android.com/reference/android/widget/… ?你不应该调用 onActionViewCollapsed()。
-
@Luksprog 它仅部分起作用。它会删除键入的查询并执行操作,但输入键盘未隐藏且搜索字段未关闭。
-
您究竟是如何再次搜索的?什么都没发生?我已经检查了 onActionViewCollapsed() 和 setIconfied() 并且都清除了文本,关闭了 SearchView 并移除了键盘。下次搜索没问题。
-
下一个搜索正常 - 存在 Internet 连接问题。 setIconified() 清除字段,但焦点没有丢失,光标在搜索字段中闪烁,键盘仍然打开。 onActionViewCollapsed() 不允许再次搜索,它会隐藏该字段而不删除第一次搜索中的值。在接下来的搜索中,它只是关闭键盘。我包含了 activity_main_actions.xml 的一部分,也许它会有所帮助
-
就我而言, setIconified(true);在实际折叠之前必须按顺序调用两次。
标签: android android-actionbar searchview