обнаружение кнопки "назад" на панели действий - (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);
}
4 ответов
поместите это на метод 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;
}
});
вы должны добавить метаданные манифеста.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;
}