Odbiornik onClick na pasku akcji dla przycisku Początek


84

Jak mogę zaimplementować niestandardowy onClickListenerprzycisk Początek paska akcji?

Zrobiłem już getSupportActionBar().setDisplayHomeAsUpEnabled(true);a teraz chcę przekierować użytkownika do określonej czynności w przypadku 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 wchodzi do onMenuItemClick.

Zasadniczo robi się to tak, jak w tym linku, ale nadal nie wchodzi w odbiornik.

Odpowiedzi:


112

jeśli ktoś potrzebuje rozwiązania

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

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

    return super.onOptionsItemSelected(item);
}

powinno to być rozwiązanie. świetna odpowiedź
jemsnaban

3
Pracował dla mnie zreturn true;
Rickiem

1
Umieść return true;na końcu ifbloku, to jest poprawne
androidguy

2
To podejście nie działa w przypadku przycisku Home / Back z ikoną strzałki.
Trancer

111

Używam actionBarSherlock , po ustawieniu supportActionBar.setHomeButtonEnabled(true);
możemy nadpisać metodę 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;
}

Mam nadzieję, że to zadziała dla ciebie ~~~ powodzenia


4
Mnie nie działa. Nie można zastąpić onMenuItemSelected jako ostatecznej wersji.
Aritra Roy

W przypadku adnotacji na Androida po prostu użyj @OptionsItem (android.R.id.home) public void yourMethod () {}
Italo Borssatto

23

jeśli używamy paska akcji podanego w systemie, 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;
}

7

Naprawiono: nie ma potrzeby używania pliku setOnMenuItemClickListener. Wystarczy nacisnąć przycisk, aby utworzyć i uruchomić działanie poprzez intencję.

Bardzo dziękuję wszystkim za pomoc!


Po prawej, pasek akcji obsługuje słuchaczy menu i wywołuje onOptionsItemSelected()automatycznie. Nie ma potrzeby ręcznej instalacji (to może faktycznie zepsuć sprawę).
Nikolay Elenkov

5

odpowiada w połowie części tego, co się dzieje. jeśli onOptionsItemSelectednie homeAsUpprzycisk kontrolny , gdy aktywność nadrzędna ustawiona w systemie manifest.xml przechodzi do działania nadrzędnego. użyj w ten sposób w tagu aktywności:

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

3

Jeśli działa w ICS, musisz jawnie włączyć akcję home. Z dokumentów :

Uwaga: jeśli używasz ikony, aby przejść do aktywności domowej, pamiętaj, że począwszy od Androida 4.0 (poziom API 14), musisz jawnie włączyć ikonę jako element akcji, wywołując setHomeButtonEnabled (true) (w poprzednich wersjach ikona była domyślnie włączona jako element akcji).


3
Zrobiłem już getSupportActionBar().setDisplayHomeAsUpEnabled(true);i agetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

powinieneś usunąć swoje Override onOptionsItemSelected i powtórzyć swoje onCreateOptionsMenu 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 wrócić (wstecz?) Do czytania zasad stackoverflow dotyczących odpowiedzi tylko z kodem.
N0un
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.