Android R.java ID переключатель всегда дает по умолчанию - PullRequest
0 голосов
/ 11 февраля 2012

Я использую оператор переключения Java для назначения различных значений переменной на основе идентификатора кнопки, вызвавшей ее.

Проблема состоит в том, что она всегда оценивает детали.* Я думаю, что ошибка может заключаться в том, как я получаю Id (бит R.java), но я провел некоторые интернет-исследования и не могу найти «правильный» способ сделать это.Это мой код (есть -99 и 23, поэтому было очевидно, что он не работал)

public void rootMe(View v){

 /* I got rid of some code here so it was shorter */

    int mult = -99;

    int buttonId = v.getId();

    switch(buttonId)
    {
    case R.id.root2:
        mult = 1/2;
    case R.id.root3:
        mult = 1/3;
    case R.id.root4:
        mult = 1/4;
    case R.id.root5:
        mult = 1/5;
    case R.id.root6:
        mult = 1/6;
    default:
        mult = 23;
    }

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

При использовании конструкции swicth после достижения case будет выполнен код ниже case - даже если есть еще один оператор case.

Если вы хотитечтобы остановить выполнение (чтобы выйти из конструкции switch) , вы должны использовать оператор break;скорее всего, в конце каждого из ваших case блоков:

switch(buttonId)
{
    case R.id.root2:
        mult = 1/2;
        break;
    case R.id.root3:
        mult = 1/3;
        break;
    case R.id.root4:
        mult = 1/4;
        break;
    case R.id.root5:
        mult = 1/5;
        break;
    case R.id.root6:
        mult = 1/6;
        break;
    default:
        mult = 23;
        break;
}

Таким образом, когда выполняется код, соответствующий оператору case, он больше не будет выполнять код, соответствующийк следующим case s операторам и выйдите из конструкции switch.

Обратите внимание, что это не характерно для Android: это просто способ, которым оператор switch работает в JAVA;см. пример: Заявление switch

1 голос
/ 11 февраля 2012

Здесь есть хорошая статья, которую вы, вероятно, должны посмотреть http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

1 голос
/ 11 февраля 2012

Вы не break.Вы должны помещать оператор break после каждого случая, чтобы он не продолжал выполняться и проверять случаи.,,

switch(buttonId)
    {
    case R.id.root2:
        mult = 1/2;
        break;
    case R.id.root3:
        mult = 1/3;
        break;
    case R.id.root4:
        mult = 1/4;
        break;
    case R.id.root5:
        mult = 1/5;
        break;
    case R.id.root6:
        mult = 1/6;
        break;
    default:
        mult = 23;
    }

Подробнее здесь: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

...