Прослуховувач onClick панелі дій для кнопки «Головна»


84

Як я можу реалізувати спеціальну 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.

В основному, це робиться так само, як у цьому посиланні, але все одно він не потрапляє в слухач.

Відповіді:


112

якщо комусь ще потрібне рішення

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

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

    return super.onOptionsItemSelected(item);
}

це має бути рішенням. чудова відповідь
jemsnaban

3
Працював у мене зreturn true;
Ріком

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

2
Цей підхід не працює для кнопки Домашня сторінка / Назад зі значком стрілки.
Трансер

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 () {}
Italo Borssatto

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

Виправлено: не потрібно використовувати a 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
Я вже робив a getSupportActionBar().setDisplayHomeAsUpEnabled(true);-agetSupportActionBar().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.