2016-12-28 2 views
0

J'ai un problème étrange avec les sous-menus android: checkableBehavior = "single". Cela fonctionne bien si le menu est dans la barre d'action, mais affiche des cases à cocher à la place des boutons radio si le menu est en mode action. J'utilise AppCompatActivity et crée le mode action avec startActionMode().Sous-menu en mode action et checkableBehavior

Menu xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/priority" 
     android:title="@string/priority" 
     app:showAsAction="ifRoom"> 

     <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/low_priority" 
        android:title="@string/low_pririty"/> 
       <item 
        android:id="@+id/normal_priority" 
        android:title="@string/normal_priority"/> 
       <item 
        android:id="@+id/high_priority" 
        android:title="@string/high_priority"/> 
      </group> 
     </menu> 
    </item> 
</menu> 

Comment puis-je résoudre ce problème?

Répondre

1

Le menu que vous utilisez fonctionne correctement avec la méthode startSupportActionMode au lieu de la méthode startActionMode. La méthode startActionMode ne doit pas être utilisée lors de l'utilisation de la bibliothèque de support AppCompatActivity.

.startSupportActionMode(new android.support.v7.view.ActionMode.Callback() { 
      @Override 
      public boolean onCreateActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 
       MenuInflater inflater = mode.getMenuInflater(); 
       inflater.inflate(R.menu.test_menu, menu); 
       return true; 
      } 

      @Override 
      public boolean onPrepareActionMode(android.support.v7.view.ActionMode mode, Menu menu) { 
       return false; 
      } 

      @Override 
      public boolean onActionItemClicked(android.support.v7.view.ActionMode mode, MenuItem item) { 
       return false; 
      } 

      @Override 
      public void onDestroyActionMode(android.support.v7.view.ActionMode mode) { 

      } 
     }); 
+0

Je vais l'essayer. Mais pourquoi startActionMode ne devrait pas être utilisé? Je n'ai rien vu à ce sujet dans la documentation. Je développe pour API 15+, donc je n'utilise pas la bibliothèque de support quand il y a une implémentation de framework (et ça a bien fonctionné avant que je rencontre ce problème). –

+0

Merci, cela a fonctionné. J'ai également vérifié le code source d'Android et découvert que startActionMode avec AppCompatActivity utilise également l'implémentation de la bibliothèque de support, en l'enveloppant dans les classes du framework. Cela signifie que les développeurs ont intentionnellement autorisé l'utilisation de startActionMode avec AppCompatActivity (sinon, il retournerait null ou déclencherait une exception) et c'est un bug. –