9

Birkaç parça içerebilen bir aktivitem var. Parçaların her biri, ActionBar'da kendi menü girişlerine sahip olabilir. Bu kadar iyi çalışıyor ve her öğe tıklanabilir ve istenen eylemi gerçekleştirir.OnOptionsItemSelected etkinliğinde, fragmanda onOptionsItemSelected öğesinden önce çağrılır. Diğer yolu mümkün mü?

Sorunum aşağıdaki gibidir.

public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      clearBackStack(); 
        setHomeFragment(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 

     } 
    } 

ben yakalamak gerekmez, böylece her Fragment bu çağırmalıdır istedim çünkü Aktivite bunu ilan: MainActivity ben İşlem Çubuğu ait HomeIcon çağrıları önünü aşağıdaki satırları ilan Her fragmanda android.R.id.home durumda.

Bir Parçacıkta setBisplayHomeAsUpEnabled (true) kullanıyorum, böylece ActionBar Simgesinin solundaki küçük oku buluyorum. HomeIcon bu parçaya tıklandığında HomeFragmenti ayarlamak istemiyorum, en son görüntülenen Parçayı ayarlamak istiyorum.

@Override 
public boolean onOptionsItemSelected(MenuItem menuItem) { 

    switch (menuItem.getItemId()) { 
    case android.R.id.home: 
     setLastFragment(); 
       return true; 
    ... 

Ancak bu Devam etsin diye istediği şekilde çalışmaz: Fragment Yöntem - Yani bir onOptionsItemSelected var. Aktivitenin onOptionsItemSelected ilk olarak çağrılır, MenuItem'i yakalar ve HomeFragment'e yönlendirir. Diğer parçalarda bildirilen diğer MenuItems ile aynı davranışı görebiliyorum. Etkinlik ilk olarak adlandırılır, MenuItem (varsayılan durum) yakalanmaz ve sonra super.onOptionsItemSelected (item) öğesine yönlendirilir.

Android, Menü Tıklamaları'nı nasıl ele aldığı gibi görünüyor. İlk Etkinlik, sonra Fragment. Bunu değiştirmek için bir yolu var mı? Her parçaya android.R.id.home-case koymak ve orada işlemek istemiyorum. Bunu yapmanın daha güzel bir yolu var mı?

cevap

4

geliştiriciler referansa göre,

"buradan tüketmek normal menü işleme devam etmesi için doğru yanlış dön." o yakalanamadığı durumlarda

Yani onOptionsItemSelected() ait etkinlik'ın uygulanmasında varsayılan olarak 'yanlış' dönen denemek istiyorum, bu şekilde olay Fragment uygulamasına kişiye gönderilecek.

+9

Bu, MrHill'in sorduğu şey değil! Aynı problemle karşı karşıyayım. Normalde aktivite "Home UP" düğmesini kullanır. Bazen, belirli bir parça aktifken "Home UP" düğmesine basıldığında özel bir eylem yapmak isteriz. Activity onOptionsItemSelected üzerinde false döndürme, olayın ele alınması için etkinliği engeller. – John

1

Mümkün mü emin değil. burada mevcut resmi dokümanlar ise:

http://developer.android.com/guide/topics/ui/actionbar.html#ActionEvents

aşağıdaki bildiren bir not vardır:

[...] Ancak, etkinlik ilk etkinliği işlemek için bir şans olur, Böylece sistem ilk önce, parça için aynı geri çağrıyı çağırmadan önce aktivitede onOptionsItemSelected() öğesini çağırır.

+1

'Fragment'ın yaşam döngüsünün ilk kısmı sırasında 'setHasOptionsMenu (true)' adını vermeniz koşuluyla **, ** olabilir **. onCreateView() 'de –

8

Sadece bu sorunla karşılaşıyorum ve aşağıdaki kodu kullanarak çalıştım.

if (id == android.R.id.home){ 
     Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container); 
     if(null != currentFragment && currentFragment.onOptionsItemSelected(item)){ 
      return true; 
     } 
    } 

Ve veridiliminin onOptionsItemSelected yönteminde, karşılık gelen şeyleri ele: etkinliğin onOptionsItemSelected fonksiyonunda , ekleyin. Bu şekilde, parçanın menü öğesi için yapacak bir şey varsa, bunu yapar ve başka herhangi bir işlemi durdurmak için doğrudur. Ve parçanın bu öğe ile bir ilgisi yoksa, false değerini döndürür ya da başkalarının işlemesini sağlamak için sonunda false döndüren super.onOptionsItemSelected yöntemini çağırır.

İlgili konular