it-roy-ru.com

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

У меня есть панель действий, содержащая searchview. Когда пользователь нажимает кнопку поиска и сворачивает окно поиска, на панели действий слева появляется кнопка «Назад». 

enter image description here

Как мы можем определить, когда пользователь нажимает эту кнопку назад?

Правка

основываясь на ответе, я проверил свой 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);
}
13
Husein Behboodi Rad

Поместите это в метод 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;
    }
});
12
Lisandro Lopez

Вы должны добавить метаданные в свой 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);
}
4
massaimara98

Просто переопределите метод ниже. 

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case Android.R.id.home:
             //do whatever you want to do here.

            }
            return true;
    }
2
Avtar Guleria

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