2016-12-28 2 views
0

私はサブメニューとアンドロイドで奇妙な問題があります:checkableBehavior = "single"。メニューがアクションバーにある場合はうまく動作しますが、メニューがアクションモードの場合はラジオボタンの代わりにチェックボックスが表示されます。私はAppCompatActivityを使用し、startActionMode()でアクションモードを作成します。アクションモードのサブメニューとcheckableBehavior

メニューの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> 

どのように私はこの問題を解決することができますか?

答えて

1

startActionModeメソッドの代わりにstartSupportActionModeメソッドを使用すると、メニューが正常に動作します。サポートライブラリAppCompatActivityを使用する場合は、startActionModeメソッドを使用しないでください。

.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

試してみます。しかし、なぜstartActionModeを使うべきではないのですか?私はドキュメンテーションでそれについて何も見ていませんでした。私はAPI 15+のために開発していますので、フレームワークの実装があるときはサポートライブラリのものを使用しません(そして、この問題に遭遇する前にうまくいきました)。 –

+0

ありがとうございました。また、私はAndroidのソースコードをチェックし、AppCompatActivityのstartActionModeもサポートライブラリの実装を使用し、フレームワークのクラス内にラップすることがわかりました。これは、開発者が意図的にAppCompatActivityでstartActionModeを使用できることを意味します(そうしないと、nullが返されるか、例外が発生します)。 –

関連する問題