17

単純なケースで問題があります(少なくとも、そう見えます)。コンテキスト メニューのサブメニューを動的に作成し、各項目にラジオ ボックスを提供する必要があります。いろいろ試行錯誤しました。を呼び出すとmenu.setGroupCheckable(0, true, true)、デフォルトでは 0 がメニュー自体であり、期待どおりにすべてのメニュー項目の右側にラジオ ボタンが表示されますが、サブメニューにはこれが必要です。だから私は次のコードを持っています:

SubMenu sub = menu.addSubMenu(R.string.name);
int count = 1000;
for(String e : someList)
{
  MenuItem item = sub.add(1, count, count, e);
  count++;
}
menu.setGroupCheckable(1, true, true);

この場合、サブメニューにラジオボックスもチェックボックスも表示されません。次に、次のコードを書きました。

SubMenu sub = menu.addSubMenu(R.string.name);
int count = 1000;
for(String e : someList)
{
  MenuItem item = sub.add(1, count, count, e);
  item.setCheckable(true);
  count++;
}
menu.setGroupCheckable(1, true, true);

これにより、サブメニューのすべての項目にチェックボックスがあり、チェックボックスは排他的に機能しますが、排他的な選択に対してより直感的に見えるため、ラジオボックスが必要です。

では、どうすればこれを達成できるでしょうか。

4

2 に答える 2

27

xml の checkableBehavior を single に設定します。ここにいくつかのコードがあります:

<menu>
      <group android:id="@+id/group"
             android:checkableBehavior="single">
             <item android:id="@+id/menu_sort_by_name"
                   android:title="@string/action_sort_by_name"/>
             <item android:id="@+id/menu_sort_by_last_edit"
                   android:title="@string/action_sort_by_last_edit"/>
      </group>
</menu>
于 2015-05-27T01:52:24.590 に答える
17

メニューとサブメニューのグループは別々に処理されることがわかりました。つまり、サブメニューで形成されたグループであり、トップレベルのメニューではなく、サブメニューを介して対処する必要があります。したがって、解決策は次のように呼び出すことです。

sub.setGroupCheckable(1, true, true);

このコードは期待どおりに機能します。つまり、サブメニューの項目にチェックボックスではなくラジオボタンが表示されます。

于 2012-07-18T13:05:33.620 に答える