72

Как я могу реализовать пользовательский 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.

В принципе, это делается как в this link, но все же он не входит в слушателя.

ответ

7

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

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

+0

Вправо, панель действий обслуживает прослушиватели меню и вызывает' onOptionsItemSelected() 'автоматически. Не нужно устанавливать вручную (что может фактически нарушить вещи). –

3

Вам нужно явно включить домашнее действие, если оно запущено на ICS. От the docs:

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

+3

Я уже сделал 'getSupportActionBar() setDisplayHomeAsUpEnabled (истина);'. и 'getSupportActionBar().setHomeButtonEnabled (true); ' – noloman

107

Я использую 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; 
} 

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

+3

+1 Это работает и для Native Action Bar. – Phil

+4

Не работает мне. Невозможно переопределить onMenuItemSelected как окончательный. –

+0

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

20

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

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; 
} 
87

, если кто-то еще нужно разрешение

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

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

    return super.onOptionsItemSelected(item); 
} 
+0

Это должно быть решение. отличный ответ – jemsnaban

+1

Работал для меня с 'return true;' – Rick

+0

Положите 'return true;' в конце блока 'if', тогда это правильно – user3175580

2

Лучший способ настройки действий бар onClickListener является onSupportNavigateUp()

Этот код будет полезен link for helping code

1

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

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

вы должны удалить ваш Переопределить onOptionsItemSelected и replate ваш 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