Android ActionBarShelock onOptionsItemSelected

Estoy usando la barra de acción de sherlock. Estoy tratando de implementarlo en mi aplicación. Pero parece que me falta algo para que funcione. Por favor revisa mis códigos. Mi aplicación no hace nada cuando toco los botones de acción. A continuación se muestran mis códigos y mi xml.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);


         menu.add("Share")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

         menu.add("Save")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

         menu.add("Set")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        return super.onCreateOptionsMenu(menu);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.share:
        new share(this).execute(image_url);
        return true;
    case R.id.save:
        new save(this).execute(image_url);
        return true;
    case R.id.set:
        new set(this).execute(image_url);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

Mi menú xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:id="@+id/share"
       android:title="@string/share"/>

 <item
        android:id="@+id/save"
        android:title="@string/save"/>

    <item
        android:id="@+id/set"
        android:title="@string/set"/>


</menu>

preguntado el 24 de agosto de 12 a las 04:08

2 Respuestas

Puede establecer OnMenuItemClickListener en los elementos de su menú como este:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add("Share")
        .setOnMenuItemClickListener(this.mShareButtonClickListener)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    // Other items...

    return super.onCreateOptionsMenu(menu);
}

Luego creas tu OnMenuItemClickListener:

OnMenuItemClickListener mShareButtonClickListener = new OnMenuItemClickListener() {

    @Override
    public boolean onMenuItemClick(MenuItem item) {  

         // Example of action following your code
         new share(YouActivity.this).execute(YouActivity.this.image_url);
         return false;
    }
};

Respondido 24 ago 12, 05:08

Recibí este error "No se puede invocar setOnMenuItemClickListener (MenuItem.OnMenuItemClickListener) en el tipo primitivo void" - KC Chai

Disculpe, mi error, lo edité. Debe configurar el oyente antes de configurar ShowAsAction (...) porque devuelve vacío - Michel-F. porzert

Una pregunta más. Entonces, ¿necesito crear un OnMenuItemClickListener adicional para cada botón que quiero poner? - KC Chai

No es obligatorio, puede usar el mismo OnMenuItemClickListener para varios elementos de menú si lo prefiere y reconocerlos usando el método item.getItemId(), dentro de onMenuItemClick(MenuItem). - Michel-F. porzert

Está inflando el menú desde el xml del menú y también agrega onCreateOptionsMenu, cualquiera de esto debe hacerse, no ambos

 menu.add(Menu.NONE, PREF_MENU_ITEM, Menu.NONE, R.string.channel_preferences_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, FEEDBACK_MENU_ITEM, Menu.NONE, R.string.feedback_from_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, ABOUT_MENU_ITEM, Menu.NONE, R.string.about_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        // commenting out this line because this func dosent have any use case
        // for APP version 3.0.0
//      menu.add(Menu.NONE, SOCIAL_MENU_ITEM, Menu.NONE, R.string.social_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, FAQ_MENU_ITEM, Menu.NONE, R.string.faq_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, DIAGNOSIS_MENU_ITEM, Menu.NONE, R.string.diagnosis_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, MY_ACCOUNT_MENU_ITEM, Menu.NONE, R.string.account_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);

Respondido 24 ago 12, 06:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.