идентификатор элемента меню в формате XML не может быть целым числом? да. действительно? - PullRequest
0 голосов
/ 16 марта 2010

хорошо, в menu.add вы добавляете целочисленный идентификатор элемента меню.

Но когда вы задаете меню в xml, @ + id не может принимать целое число, поэтому вы не можете проверить идентификатор для пункта меню как целое число в операторе switch.

Какую очевидную вещь я упускаю, потому что, безусловно, несоответствие этого глупого дурака не могло пройти мимо всех этих замечательных гениев в Google.

Кроме того, когда я присваиваю пункту меню имя, например "@ + id / myMenuItem", item.getItemId () возвращает целое число, длинное, которое, я полагаю, является представлением шестнадцатеричного указателя.

M

Ответы [ 3 ]

6 голосов
/ 16 марта 2010

Нельзя указывать атрибут id в XML как целое число, поскольку все идентификаторы (в процессе сборки) генерируются в целое число, а затем помещаются в R.java для доступа позже. Если они позволят вам назвать его целым числом, то вы не будете создавать легальный код Java (потому что переменные Java не могут быть просто числом).

Другими словами, если вы называете идентификатор «@ + id / что-то», то в R.java есть статическая переменная «что-то», которая содержит целочисленный идентификатор для идентификатора. Затем в коде вы получаете к нему доступ таким образом, когда пользователь щелкает пункт меню:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.something: {
        // Do something here
        return true;
    }
    return super.onOptionsItemSelected(item);
}
1 голос
/ 16 марта 2010

@id значения должны отображаться на имена Java (@id/foo превращается в R.id.foo), и вы не можете иметь имя Java, которое является чисто числовым Я даже не уверен, что он может начинаться с цифры.

0 голосов
/ 16 марта 2010

Проверьте этот пример:

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));
    }
...