0

わかりました、menu.add で、整数の menuitem id を追加します。

しかし、xml でメニューを指定する場合、@+id は整数を取ることができないため、switch ステートメントでメニュー項目の ID を整数としてテストすることはできません。

確かに、この骨の折れる愚か者は、Google のすべての素晴らしい天才たちと一緒に集結することはできなかったはずだからです。

その上、メニュー項目に「@+id/myMenuItem」のような名前を付けると、item.getItemId() は整数、長い整数を返します。これは 16 進ポインターの表現だと思います。

M

4

3 に答える 3

6

XML で id 属性を整数として指定することはできません。これは、すべての ID が (ビルド プロセスで)整数に生成され、後でアクセスできるように R.java に配置されるためです。整数で名前を付けることを許可した場合、正当な Java コードを作成することはできません (Java 変数は単なる数値ではないため)。

つまり、id に「@+id/something」という名前を付けると、R.java には、id の整数 id を含む静的変数「something」が存在します。コードでは、ユーザーがメニュー項目をクリックすると、次のようにアクセスします。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.something: {
        // Do something here
        return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2010-03-16T20:09:03.930 に答える
1

@id値は Java 名 (@id/fooに変換R.id.foo) にマップする必要があり、純粋な数値の Java 名を持つことはできません。数字で開始できるかどうかさえわかりません。

于 2010-03-16T20:05:26.663 に答える
0

この例をチェックしてください:

private static final int EDIT_ID = Menu.FIRST + 3;
private static final int DELETE_ID = Menu.FIRST + 4;
 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
                'e');
        menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
                .setAlphabeticShortcut('d');
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        switch (item.getItemId()) {
        case EDIT_ID:

            edit(info.id);
            return (true);
        case DELETE_ID:

            delete(info.id);
            return (true);
        }

        return (super.onOptionsItemSelected(item));
    }
于 2010-03-16T20:41:45.923 に答える