6

簡単な質問です。

子アイテムのメニューがあります:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/fp_pitcher"
        android:title="Pitcher">
    </item>
    <item
        android:id="@+id/fp_catcher"
        android:title="Catcher">
    </item>
<!-- SNIP ---> 
</menu>

そして後で、このメニューのサブメニューとしてそれを含めたいと思います:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item
        android:id="@+id/teameditor_remove"
        android:title="Remove Player from Team">
    </item>

    <item
        android:id="@+id/teameditor_assignbattingposition"
        android:title="Assign Batting Position">
    </item>

    <item
        android:id="@+id/teameditor_assignfieldingposition"
        android:title="Assign Feilding Position">
        <!-- I want to include the submenu here-->
    </item>

</menu>

ここでの質問はこれに答えました-サブメニューを膨らませる方法がわかりません。

onContextItemSelected メソッドでインフレートすると考えていますが、インフレートには onContextItemSelected に渡されないメニュー オブジェクトが必要です。

4

2 に答える 2

0

きれいではありませんが、XML コンテンツをコピーせずに行う必要がある場合 (簡単に動作します)。2 番目のメニューmenu.findItem(R.id.teameditor_assignfieldingposition).getSubMenu().add(...)を拡張すると、追加する各項目に対しても実行できます。String 配列リソースに文字列 ("Pitcher" と "Catcher") がある場合、その配列を繰り返し処理して、元のものと同じ項目を追加できます。または、おそらく他のメニューの XML を解析する必要があります。おそらくそれを膨らませてそれを使用することでごまかすことができsize()ますgetItem(int)

実際、最初のメニューを a に膨らませてから、Menuand を使用size()getItem(int)MenuItems を取り出すことができます。次に、各項目について、2 番目のメニューの でadd(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle())実行できます。これにより、最初のメニューのすべての項目がその項目のサブメニューとして追加されます。これは、2 つの XML ファイルを膨張させていることを意味しますが、個別の XML ファイルを使用する場合は、 for メニュー XML ファイルがないため、これは避けられません。おそらく、2 番目のメニューを通常どおり ( で) 膨らませてから、最初のメニューを でサブメニューとして追加します( で作成したメニューが与えられます)。ですべて実行できると思いますが、 でメニューを変更する方がよいと思います。getSubMenu()findItem(R.id.teameditor_assignfieldingposition)<include>onCreateOptionsMenu(...)onPrepareOptionsMenu(...)onCreateOptionsMenu(...)onCreateOptionsMenu(...)onPrepareOptionsMenu(...)

2番目の方法が私が見つけることができる最良の解決策だと思います。念のため、最初のオプションを代替手段として残しています。

于 2012-11-29T17:58:09.187 に答える