searchview
を含むアクションバーがあります。ユーザーが検索ボタンをクリックして検索ビューを折りたたむと、アクションバーの左側に戻るボタンが表示されます。
ユーザーがこの戻るボタンをクリックしたことをどのように検出できますか?
編集
私のOnOptionsItemSelected
をチェックした答えに基づいていますが、それも呼び出していません。これは私のOnOptionsItemSelected
のコードです。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (item != null && id == Android.R.id.home) {
if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
} else {
mNavigationDrawerFragment.openDrawer(Gravity.RIGHT);
}
return true;
}
if (id == R.id.action_search) {
return true;
}
return super.onOptionsItemSelected(item);
}
これをonCreateOptionsMenuメソッドに配置します。
MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
//DO SOMETHING WHEN THE SEARCHVIEW IS CLOSING
return true;
}
});
必要なアクティビティのmanifest.xmlにメタデータを追加する必要があります
お気に入り
<activity
Android:name=".Example"
Android:label="@string/Example"
Android:theme="Theme.AppCompat.Light">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".MainActivity" />
</activity>
あなたのコードは例ではこのようになるはずです
@Override
protected void onCreate(Bundle savedInstanceState) {
.......
getActionBar().setDisplayHomeAsUpEnabled(true);
......
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case Android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
以下のメソッドをオーバーライドするだけです。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
//do whatever you want to do here.
}
return true;
}
Androidでアクションバーの戻るボタンをオーバーライドする方法の重複の可能性がありますか?
いずれかの方法:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do what you want to do
}
});
これを試してください:onOptionsItemSelectedを使用して検索の変更を検出するのではなく、OnQueryTextListenerを使用してください。 onQueryTextChangedは、戻るボタンで呼び出されます(クエリテキストが変更されたとき)。
メニューを設定するときに、searchViewにリスナーを割り当てます。 onQueryTextChangeは、検索条件が変更されるたびに(検索ボタン以外のキーボードを押すと)呼び出され、[戻る]ボタンが押されたときに空の文字列で呼び出されます。 onQueryTextSubmitは、キーボードの検索ボタンが押されたときに呼び出されます。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.i(TAG,"onQueryTextSubmit: " + s);
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
Log.i(TAG,"onQueryTextChange: " + s);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(currentFragmentTag);
if (fragment.getClass().getName().startsWith("com.mydomain.myapp.mainactivity.MyFragment")) {
if (s.isEmpty()) {
((SingleICPListFragment)fragment).clearSearchCriteria();
} else {
((SingleICPListFragment) fragment).applySearchCriteria(s);
}
}
return true;
}
});
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}