2011-12-12 11 views
30

L'app Android utilizza un progetto di libreria per contenere la maggior parte del codice dell'app, in quanto sono presenti due versioni dell'app create dalla sorgente principale. Dal momento che un aggiornamento IntelliJ IDEA (per V11) sto ottenendo questo avvertimento su ciascuna delle istruzioni case sottostanti:ID elemento menu in un progetto di libreria Android?

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

Ecco il codice:

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

OK, quindi se non riesco a fare riferimento loro tramite il loro ID, come faccio a farli riferimento?

+0

Suppongo che una soluzione sarebbe quella di creare dinamicamente le voci di menu, ma che rimuove tutti i vantaggi di utilizzare le risorse per i menu. Questi errori sembrano dire che non è possibile utilizzare le definizioni del menu XML nei progetti di libreria? –

risposta

68

Sostituire switch con un costrutto if/else if.

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

Questo è neccessary dal ADT 14 perché il modificatore finale è stato rimosso da id nella classe R.

Vedi Non-constant Fields in Case Labels

+0

Mille grazie, Alex. –

Problemi correlati