Обнаружение щелчка на кнопке возврата панели действий – (OnOptionsItemSelected не вызывается при нажатии кнопки панели действий)

У меня есть панель действий, содержащая 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; } 

Попробуйте это: вместо того, чтобы использовать 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; }