2011-12-12 5 views
30

La aplicación de Android usa un proyecto de biblioteca para contener la mayor parte del código de la aplicación, ya que hay dos versiones de la aplicación creadas a partir de la fuente principal. Desde una actualización IntelliJ IDEA (a v11) estoy recibiendo esta advertencia en cada una de las declaraciones de caso a continuación:ID de elemento de menú en un proyecto de biblioteca de Android?

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

Aquí está el código:

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, así que si no puedo hacer referencia a a través de su identificación, ¿cómo los hago referencia?

+0

supongo que una solución sería crear dinámicamente los elementos de menú, pero que elimina todos los beneficios del uso de los recursos para los menús. Estos errores parecen estar diciendo que no es posible usar definiciones de menú XML en proyectos de biblioteca? –

Respuesta

68

Sustituya switch con una construcción if/else if.

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

Esto es necesario desde ADT 14 porque el modificador final se eliminó de los identificadores en la clase R.

Ver Non-constant Fields in Case Labels

+0

Muchas gracias Alex. –

Cuestiones relacionadas