код меню android не работает

Я пытался понять, почему мое логическое значение не меняется, когда я нажимаю кнопку, когда я изменил его вручную, оно сработало, но ничего не делает. Я пытался следовать инструкциям к слову, но они не работают. Может ли кто-нибудь указать, где я ошибаюсь?

public boolean onOptionsItemSelected(MenuItem menu) 
{
    MenuItem freeze = (MenuItem)findViewById(R.id.freeze);  
    // Handle item selection 
    switch (menu.getItemId()) { 
        case R.id.freeze: 
            if (freze == false){
                freze = true;
            } else {
                freze = false;
            }
            return true; 
        case R.id.toggleVolCount: 
            if (toggleVol == true){
                toggleVol = false;
            } else {
                toggleVol = true;
            }
            return true; 
        default: return super.onOptionsItemSelected(menu); 
    } 

Спасибо за всю вашу помощь, когда я попробовал предложенный код, и он не сработал, я вернулся и изменил меню. Ранее я сделал кнопку с onClick для создания меню, когда создал значок с кодом, код, который я ранее написал, работал нормально. Надеюсь, это поможет кому-то кроме меня, чтобы я не чувствовал себя таким идиотом.}


person jcw    schedule 18.06.2012    source источник
comment
Вы имеете в виду freeze, а не freze. Это даст вам ошибку компиляции, поэтому я предполагаю, что это опечатка.   -  person keyser    schedule 18.06.2012
comment
Я думаю, что это ошибка опечатки. заморозить != заморозить   -  person Om3ga    schedule 18.06.2012
comment
Посмотрите на это   -  person Praveenkumar    schedule 18.06.2012
comment
Не будем спешить с выводами. В приведенном выше коде «freze» вполне может быть (и, вероятно, является) логическим членом содержащего класса, написанным иначе, чем «freeze», чтобы избежать столкновения с локальной переменной в методе (хотя я лично предпочитаю использовать this- ключевое слово в подобных ситуациях).   -  person Kallja    schedule 18.06.2012
comment
@user1462846 user1462846 Не могли бы вы опубликовать XML определения своего меню (или код создания, если вы делаете это таким образом). Вы дважды проверили, что используете правильные идентификаторы с вашими пунктами меню?   -  person Kallja    schedule 18.06.2012
comment
в java все типы следуют передаче по значению. Я думаю, что это причина, по которой вы столкнулись с этой проблемой.   -  person Zombie    schedule 18.06.2012
comment
@droids Дело не в этом. Оператор switch использует примитивный тип int, который действительно передается по значению. Кроме того, платформа Android предоставляет определенные гарантии в отношении объектов, возвращаемых методом findViewById(int).   -  person Kallja    schedule 18.06.2012
comment
@Jarkko спасибо, что нашли время объяснить. Поскольку вопрос не так ясен, я подумал, что логическое значение freze не получает изменений, сделанных внутри переключателя, вне оператора переключателя, и прокомментировал это. в любом случае это было полезно для меня в понимании.   -  person Zombie    schedule 18.06.2012


Ответы (1)


В папке res создайте одно меню папки, например drawable

Создайте в этой папке новый XML-файл optionmenu.xml.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menuitem" 
        android:title="Prefs">
    </item>
         <item android:id="@+id/menuitem1" 
        android:title="Prefs1">
    </item>


</menu>

В методе onCreate напишите этот код....

setOptionMenu(R.menu.optionmenu);

и в методе переопределения меню напишите этот код.....

@Override
    public boolean onOptionsItemSelected(MenuItem menu) {
        switch (menu.getItemId()) {
        case R.id.menuitem:
            startActivity(new Intent(this, Prefs.class));
            break;

case R.id.menuitem1:
            startActivity(new Intent(this, Prefs1.class));
            break;
        default:
            break;
        }

        return true;
    }
person Arvind Kanjariya    schedule 18.06.2012