Ana Sayfa düğmesi için Eylem Çubuğu'nun onClick dinleyicisi


85

onClickListenerEylem Çubuğunun Ana Sayfa düğmesi için bir özelliği nasıl uygulayabilirim ?

Zaten bir yaptım getSupportActionBar().setDisplayHomeAsUpEnabled(true);ve şimdi Ana Sayfa düğmesinin tıklanması durumunda kullanıcıyı belirli bir etkinliğe yönlendirmek istiyorum.

İle denedim:

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

ama asla onMenuItemClick.

Temelde, bu bağlantıdaki gibi yapılır, ancak yine de dinleyiciye girmez.

Yanıtlar:


113

başka birinin çözüme ihtiyacı varsa

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

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

    return super.onOptionsItemSelected(item);
}

bu bir çözüm olmalıdır. harika cevap
jemsnaban

3
Benim için çalıştıreturn true;
Rick

1
Bloğun return true;sonuna bir koyun if, o zaman doğru
androidguy

2
Bu yaklaşım, ok simgeli Ana Sayfa / Geri düğmesi için çalışmıyor.
Trancer

111

ActionBarSherlock'u kullanıyorum, ayarladıktan sonra supportActionBar.setHomeButtonEnabled(true);
onMenuItemSelected yöntemini geçersiz kılabiliriz:

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

Umarım bu senin için çalışır ~~~ iyi şanslar


4
Bana çalışmıyor OnMenuItemSelected son olarak geçersiz kılınamaz.
Aritra Roy

Android ek açıklamalarında yalnızca @OptionsItem (android.R.id.home) kullanın public void yourMethod () {}
Italo Borssatto

23

Sistem verilen eylem çubuğunu kullanırsak aşağıdaki kodu iyi çalışır

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

Düzeltildi: a setOnMenuItemClickListener. Sadece düğmeye basmak, niyet aracılığıyla etkinliği oluşturur ve başlatır.

Yardımlarınız için herkese çok teşekkürler!


Doğru, işlem çubuğu menü dinleyicilerini ve çağrıları onOptionsItemSelected()otomatik olarak halleder . Manuel olarak yüklemeye gerek yok (bu aslında işleri bozabilir).
Nikolay Elenkov

5

olup bitenlerin yarısı kadar cevap veriyor. manifest.xml sistemindeki üst etkinlik kümeleri üst etkinliğe gittiğinde düğme onOptionsItemSelectedkontrol edilmezse homeAsUp. etkinlik etiketinde şöyle kullanın:

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

3

ICS üzerinde çalıştırılıyorsa ana işlemi açıkça etkinleştirmeniz gerekir. Gönderen docs :

Not: Ev etkinliğine gitmek için simgeyi kullanıyorsanız, Android 4.0 (API düzeyi 14) ile başlayarak, setHomeButtonEnabled (true) (önceki sürümlerde, simgesi varsayılan olarak bir eylem öğesi olarak etkinleştirilmiştir).


3
Zaten a getSupportActionBar().setDisplayHomeAsUpEnabled(true);and a yaptımgetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

OnOptionsItemSelected Override'ınızı silmeli ve onCreateOptionsMenu'nuzu bu kodla yeniden yazmalısınız.

@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
İnsanların stackoverflow'un yalnızca kodla yanıtla ilgili politikalarını anlamalarına ve okumalarına (geri mi?) Yardımcı olmak için lütfen bazı açıklamalar ekleyin.
N0un
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.