72

Jak mogę zaimplementować niestandardowy onClickListener dla przycisku strony głównej paska akcji?Listening onClick paska czynności dla przycisku Home

Zrobiłem już getSupportActionBar().setDisplayHomeAsUpEnabled(true); i teraz chcę przekierować użytkownika do określonej czynności na wypadek kliknięcia przycisku Strona główna.

Próbowałem z:

@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); 
     } 
    } 

ale nigdy nie wejdzie w onMenuItemClick.

Zasadniczo robi się to tak jak w przypadku this link, ale nadal nie wchodzi do odbiornika.

Odpowiedz

7

Naprawiono: nie trzeba używać setOnMenuItemClickListener. Wystarczy nacisnąć przycisk, aby utworzyć i uruchomić działanie zgodnie z intencją.

Dziękuję wszystkim za pomoc!

+0

W prawo, pasek działań zajmuje się słuchaczami menu i automatycznie wywołuje' onOptionsItemSelected() '. Nie trzeba instalować ręcznie (może to faktycznie uszkodzić). –

3

Musisz jawnie włączyć akcję domową, jeśli działa na ICS. Od the docs:

Uwaga: Jeśli używasz ikonę, aby przejść do działalności domu, pamiętaj, że począwszy Android 4.0 (API poziom 14), należy wyraźnie włączyć ikonę jako elementu działań przez wywoływanie setHomeButtonEnabled (true) (w poprzednich wersjach ikona była domyślnie włączona jako ).

+3

ja już zrobiłem 'getSupportActionBar() setDisplayHomeAsUpEnabled (true);'. i 'getSupportActionBar().setHomeButtonEnabled (true); ' – noloman

107

używam actionBarSherlock, po ustawiamy supportActionBar.setHomeButtonEnabled(true);
możemy zastąpić onMenuItemSelected metody:

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

Mam nadzieję, że praca dla Ciebie ~~~ powodzenia

+3

+1 Działa to również na pasek rodzimych działań. – Phil

+4

Nie działa mnie ja. Nie można przesłonić onMenuItemSelected jako ostatecznego. –

+0

Z adnotacjami androida wystarczy użyć @OptionsItem (android.R.id.home) public void yourMethod() {} –

20

jeśli używamy system podany pasek czynności następujący kod działa dobrze

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

jeśli ktoś potrzebuje roztworowi

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

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

    return super.onOptionsItemSelected(item); 
} 
+0

to powinno być rozwiązanie. wspaniała odpowiedź – jemsnaban

+1

Pracowałem dla mnie z 'return true;' – Rick

+0

Umieść 'return true;' na końcu bloku 'if', to jest poprawne – user3175580

2

Najlepszym sposobem, aby dostosować pasek akcji onClickListener jest onSupportNavigateUp()

Kod ten będzie pomocny link for helping code

1

odpowiedzi na pół część tego, co się dzieje. jeśli przycisk nie ma kontroli nad ustawieniem w systemie manifest.xml, przechodzi do działania nadrzędnego. używać jak to w tagu aktywności:

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

powinieneś usunąć swoje Override onOptionsItemSelected i replate swoją onCreateOptionsMenu z tym kodem

@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

Proszę dodać kilka wyjaśnień, aby pomóc ludziom zrozumieć i przejść (wróć?), Czytając zasady stackoverflow dotyczące odpowiedzi tylko za pomocą kodu. – N0un

Powiązane problemy