Слушатель onClick панели действий для кнопки Home


85

Как я могу реализовать настройку onClickListenerкнопки «Домой» на панели действий?

Я уже сделал это, getSupportActionBar().setDisplayHomeAsUpEnabled(true);и теперь я хочу перенаправить пользователя на определенное действие в случае нажатия кнопки «Домой».

Я пробовал:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

но он никогда не входит в onMenuItemClick.

По сути, это делается так же, как в этой ссылке, но все равно не входит в слушатель.

Ответы:


113

если кому-то еще нужно решение

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

это должно быть решением. отличный ответ
jemsnaban 04

3
Работал для меня сreturn true;
Риком

1
Поставьте a return true;в конце ifблока, тогда все правильно
androidguy

2
Этот подход не работает для кнопки Home / Back со значком стрелки.
Trancer 01

111

Я использую actionBarSherlock , после того, как мы установили, supportActionBar.setHomeButtonEnabled(true);
мы можем переопределить метод onMenuItemSelected:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

Надеюсь, эта работа для вас ~~~ удачи


4
Не работает мне я. Невозможно переопределить onMenuItemSelected в качестве последнего.
Аритра Рой,

С аннотациями Android просто используйте @OptionsItem (android.R.id.home) public void yourMethod () {}
Итало Борссатто

23

если мы используем системную панель действий, следующий код работает нормально

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}

7

Исправлено: нет необходимости использовать setOnMenuItemClickListener. Просто нажав кнопку, он создает и запускает действие через намерение.

Большое спасибо всем за вашу помощь!


Правильно, панель действий заботится о слушателях меню и onOptionsItemSelected()автоматически вызывает . Нет необходимости устанавливать вручную (это может действительно сломать работу).
Николай Еленков

5

отвечает на половину того, что происходит. если onOptionsItemSelectedнет, homeAsUpкнопка управления , когда родительская активность установлена ​​в системе manifest.xml, переходит к родительской активности. используйте это в теге активности:

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>

3

Вам необходимо явно включить домашнее действие, если вы работаете в ICS. Из документов :

Примечание. Если вы используете значок для перехода к домашнему действию, имейте в виду, что, начиная с Android 4.0 (уровень API 14), вы должны явно включить значок как элемент действия, вызвав setHomeButtonEnabled (true) (в предыдущих версиях значок был включен как элемент действия по умолчанию).


3
Я уже сделал getSupportActionBar().setDisplayHomeAsUpEnabled(true);иgetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

вам следует удалить свой Override onOptionsItemSelected и повторно разместить onCreateOptionsMenu с этим кодом

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }

1
Пожалуйста, добавьте некоторые пояснения, чтобы помочь людям понять и вернуться (назад?) К чтению политик stackoverflow в отношении ответа только с кодом.
N0un
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.