値を入力した後、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
です-理由はわかりません。 ドキュメント を読みましたが、何もわかりません。
編集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;
}
ここ 私の検索はビューではなくウィジェットであるため、collapseActionView()が機能しないことを読みました。
使用する:
searchMenuItem.collapseActionView();
の代わりに:
searchView.onActionViewCollapsed();
_AppCompat library
_を使用している場合は、次を使用します。
MenuItemCompat.collapseActionView(searchMenuItem);
私の場合、invalidateOptionsMenu();
を呼び出すとSearchViewが閉じます
言及された解決策 ここ は簡単で、完璧に機能します。
基本的に、SearchView
でsetQuery("", false)
およびsetIconified(true)
を呼び出します。
Menu_main.xmlに以下を追加します。
<item Android:id="@+id/action_search"
Android:icon="@Android:drawable/ic_menu_search"
Android:title="Search"
app:showAsAction="collapseActionView|ifRoom"
Android:orderInCategory="1"
app:actionViewClass="Android.support.v7.widget.SearchView"
Android:menuCategory="secondary"
/>
およびonCreateOptionsMenu
final MenuItem miSearch = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) miSearch.getActionView();
searchView.setQueryHint("Searh For");
searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(context,query, Toast.LENGTH_LONG).show();
// Here Put Your Code.
//searchView.onActionViewCollapsed();
miSearch.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
探しているのは、プログラムで検索バーを閉じる方法のようです。残念ながら、これに対する方法または同等の回避策はありません。 別の投稿 を見たことがあるかもしれませんが、これにはいくつかの提案がありましたが、これを行う実際の方法はありません。
setIconified(true)
を呼び出す上記の最初の編集が最良の選択肢です。ドキュメントでは、setIconified(true)
を呼び出すと、検索ウィジェットが折りたたまれ、クリアされ、属性iconifiedByDefault
がtrueの場合はフォーカスから削除されることが推奨されます(デフォルトでは問題がないため、 activity_main_actions.xmlで)。
こんにちは、私は同様のシナリオに直面したので、コードに変更したことでうまくいくと思います。
お役に立てれば...:)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
Menu mMenuItem = menu.findItem(R.id.action_search_loc); // take a reference with menue item
searchView = (SearchView) mMenuItem.getActionView(); //use that to find searchview
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 {
mMenuItem.collapseActionView(); //this will collapse your search view
}
catch(Exception ex){
ex.printStackTrace();
System.out.println(ex);
}
return true;
}
};