2011-12-12 30 views
30

Android uygulaması, çekirdek kaynağından oluşturulan uygulamanın iki sürümü olduğundan, uygulama kodunun çoğunu içerecek bir kütüphane projesi kullanır. Aşağıda durum açıklamalarının her birinde bu uyarıyı alıyorum (v11 kadar) bir IntelliJ IDEA güncelleme yana: BuradaMenü öğesi kimlikleri?

Resource IDs cannot be used in a switch statement in Android library modules 

kod:

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_item_one: // Build error here 
      // Do stuff 
      return true; 
     case R.id.menu_item_two: // Build error here 
      // Do stuff 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Tamam, bu yüzden başvuru yapamazsınız eğer Onları kimlikleri üzerinden nasıl referans gösterebilirim?

+0

Bir çözüm dinamik menü öğelerini oluşturmak üzere olurdu herhalde Non-constant Fields in Case Labels Bkz, ama bu menüler için kaynakları kullanarak tüm faydalarını kaldırır. Bu hatalar, kütüphane projelerinde XML menü tanımlarının kullanılmasının mümkün olmadığını mı söylüyor? –

cevap

68

if/else if yapısına sahip switch yerine.

int id = item.getItemId(); 
if(id == R.id.menu_item_one) { 
    // ... 
} 
else if(id == R.id.menu_item_two) { 
    // ... 
} 

Bu, ADT 14'ten beri zorunludur çünkü son değiştirici, R sınıfındaki kimlikten kaldırılmıştır.

+0

Çok teşekkürler Alex. –

İlgili konular