Обнаружение щелчка на кнопке возврата панели действий - (OnOptionsItemSelected не вызывается, когда нажимается кнопка возврата панели действий)
У меня есть панель действий, содержащая searchview
. Когда пользователь нажимает кнопку поиска и сворачивает поиск, на панели действий отображается обратная кнопка с левой стороны.
![enter image description here]()
Как мы можем обнаружить, когда пользователь нажимает эту кнопку?
Edit
на основе ответа я проверил свой 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);
}
Ответы
Ответ 1
Поместите это на метод 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;
}
});
Ответ 2
Вы должны добавить метаданные вашего файла 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 Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
Ответ 3
Просто переопределите метод ниже.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//do whatever you want to do here.
}
return true;
}
Ответ 4
Попробуйте это: вместо того, чтобы использовать 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;
}
Ответ 5
Возможный дубликат как переопределить кнопку назад панели действий в 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
}
});