2012-01-05 5 views
7

この問題は3日間解決できません。私はのMenuItemと非標準操作のためにこれを必要として働くことができないAndroidメニューのXMLリソースをオブジェクトリストに解析する

public class MenuItem { 
    private CharSequence text; 
    private Drawable image; 
    private int actionTag; 

    //... getters and setters ... 
} 

:私は、私はこのXMLの解析後に一覧<のMenuItem >を受信したいメニュー

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/categoryEditButton" 
      android:title="@string/edit" 
      android:icon="@drawable/edit" /> 
    <item android:id="@+id/categoryMoveUpButton" 
      android:title="@string/move_up" 
      android:icon="@drawable/up" /> 
    <item android:id="@+id/categoryMoveDownButton" 
      android:title="@string/move_down" 
      android:icon="@drawable/down" /> 
    <item android:id="@+id/categoryDeleteButton" 
      android:title="@string/delete" 
      android:icon="@drawable/trash" /> 
</menu> 

のためのシンプルなXMLリソースを持っています以下のような標準的な方法でこのリソース教材と:

... 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.some_menu, menu); 

... 

誰がこれで私を助けることができますか?ありがとう。

答えて

-1

簡単にchange menu items at runtimeできます。コメントの後

更新:

  1. Parse XMLは(..画像、文字列、ドロウアブルなど)リソースIDとリソースタイプを取得するResourcesクラス経由

  2. Access resources。すべてのリソースタイプには、アクセスするための異なるメソッドがあります。

+0

いいえ、あなたはわかりません。私は自分自身のメニューを作成し、このようなメソッドを作成したい:public void setItemsFromResource(int menuResourceId){...}標準メニューのリソースXMLからの解析用メニュー。私は自分のXML形式でこの機能を書いていましたが、標準のXMLメニューのリソース形式を解析する必要があります。アイコンからリソースを取り出し、リソースから文字列を取得します。 –

11

これは役立ちます:

... 

PopupMenu p = new PopupMenu(this, null); 
Menu menu = p.getMenu(); 
getMenuInflater().inflate(R.menu.some_menu, menu); 

//Usage of menu 
System.out.println("LOG id: "+ menu.getItem(0).getItemId()); 
System.out.println("LOG title: "+ menu.getItem(0).getTitle()); 
System.out.println("LOG icon: "+ menu.getItem(0).getIcon()); 

... 

をのPopupMenuの作成膨張したときは、あなたのXMLに定義された情報で満たされることMenuオブジェクトを作成するために、そのわずかなトリック。

+0

これは正しい答えです。サポートライブラリv4を使用してAPI 7+で動作します – Iree

1

ありがとうございます。 2.33では動作しません。 解決策を見つけましたHere

private Menu newMenuInstance(Context context) { 
    try { 
     Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder"); 
     Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class); 
     return (Menu) constructor.newInstance(context); 
    } catch (Exception e){ 
     MyLog.GetMyLog().e(e); 
    } 
    return null; 
} 
関連する問題