私は単一のアクティビティを使用してSearchViewを表示し、検索結果を表示しています。検索結果は単なる項目のサブセットなので、検索はフィルタとして機能します。 SearchViewの戻るボタンをクリックしたときに、ビュー内のすべてのアイテムを復元する方法がわからないことを除いて、すべて正常に動作しているようです。SearchViewの戻るボタンを検出するには?
また、ユーザーが検索結果から前のビュー(私の場合は同じビュー)にナビゲートしたときを検出する別の方法があります。
おかげ
私は単一のアクティビティを使用してSearchViewを表示し、検索結果を表示しています。検索結果は単なる項目のサブセットなので、検索はフィルタとして機能します。 SearchViewの戻るボタンをクリックしたときに、ビュー内のすべてのアイテムを復元する方法がわからないことを除いて、すべて正常に動作しているようです。SearchViewの戻るボタンを検出するには?
また、ユーザーが検索結果から前のビュー(私の場合は同じビュー)にナビゲートしたときを検出する別の方法があります。
おかげ
だからあなたの質問のタイトルを見て、あなたはSearchView
が閉じているときに検出する方法がわからないので、あなたは、「正常」な状態ときに、あなたの意見を復元することはできませんSearchView
はもう開いていません。このように、あなたのSearchView
にSearchView.OnCloseListener
::(簡単な)ソリューション
のAndroid 4.0以降のよう
古いソリューションを追加することです
SearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
// This is where you can be notified when the `SearchView` is closed
// and change your views you see fit.
}
});
EDIT:
Android 4.0以降で動作する更新されたソリューション
明らかにOnCloseListener
はバグがあり、新しいバージョンのAndroid(4.0以降)では動作しません。参照:https://code.google.com/p/android/issues/detail?id=25758
これに対する解決策は、SearchView
のサポートライブラリのバージョンを使用することです:
マイonCreateOptionsMenu
はこのようになります:Googleがさえ書くこと気にしなかった理由については
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
MenuItem searchMenuItem = menu.findItem(R.id.searchView);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Toast.makeText(ScrollingActivity.this, "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
Toast.makeText(ScrollingActivity.this, "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show();
return true;
}
});
}
私が知らないドキュメントのコメントですが、悲しいです。
EDIT2:これはまた、代わりにOnCloseListener
のOnActionExpandListener
を使用する方法を示し
how to handle back button of Search View in android
:
ちょうどコメントで追加@MateiRaduリンクを追加します。これが役に立ちます。
残念ながら、SearchViewが終了するとonClose()は呼び出されません。しかし、onQueryTextSubmit()とonQueryTextChange()(th3pat3lによって示唆されているように)が呼び出されます。理想的には、3人のリスナーをすべて利用したいと思っています。 – bdristan
@bdristan私は自分の答えを更新しました。 – Darwind
独自のSearchViewカスタムクラスを使用している場合は、次のようにします。@Override public void onActionViewCollapsed(){ super.onActionViewCollapsed(); } – Mike6679
ダーウィンズの答えは仕事をしますが、ユーザーがキーボードを閉じるために戻るボタンを押したときと、SearchView
にもうフォーカスがないときにのみ機能します。
より良い方法は、SearchView
のテキストの変更を聞くことです。
この方法で、テキストが更新されているときにビューを復元し、UIを制御できます。
ここで私はそれをやっています。
SearchView searchView = new SearchView(context);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// this is when user is done typing and clicks search
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// you can use this to do a "live" search while the user is typing.
// this will trigger each time user changes (adds or removes) text
// so when newText is empty, restore your views
return false;
}
});
一つの他のトリックがあります:
searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
@Override
public void onSearchViewShown() {
if(!txtToolbarTitle.getText().toString().isEmpty()){
searchView.setQuery(txtToolbarTitle.getText().toString()+ " ", false);
}
}
@Override
public void onSearchViewClosed() {
if(txtToolbarTitle.getText().toString().isEmpty()){
finish();
}
}
});
はここhttp://stackoverflow.com/questions/25842555/how-to-handle-back-button-of-search-viewをご覧ください-in-android –
Matei Radu、th3pat3Iの回答を拡大するなど、必要なすべての情報を提供してくれてありがとう。 – bdristan
@bdristan私は自分の答えを更新した後、@MateiRaduが 'SearchView'のオープン/クローズを聞いて正しい答えをあなたに提供したことがわかりました。しかし、私の答えがまだ役に立ったと思っています。なぜそれがもううまくいかないのかについての説明があるからです。 – Darwind