Синтаксическая ошибка на токене "{", после этого токена ожидается SwitchLabels - PullRequest
4 голосов
/ 09 апреля 2011

Я хочу открыть новую форму, когда я выбираю опцию из класса счетчика

я пробую это, но у меня есть синтаксическая ошибка

Синтаксическая ошибка на токене "{", SwitchLabels ожидается после этого лексема

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tf);
    Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
        this, R.array.tfoptions,android.R.layout.simple_spinner_item);
    adapter2.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(adapter2);

    spinner2.setOnItemSelectedListener(new MyOnItemSelectedListener());

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
            switch (view.isClickable()) {       <---------------- syntax error 
                Spinner spinner2;
            case spinner2.setSelection(0):
                startActivity(new Intent(this,To.class));
                break;
            case spinner2.setSelection(1):
                startActivity(new Intent(this,out.class));
            default:
                break;
            }
        }
        public void onNothingSelected(AdapterView parent) {
            // Do nothing.
        }
    }
}

Ответы [ 3 ]

4 голосов
/ 09 апреля 2011

Вы пытались объявить переменную перед первым блоком case.Ты не сможешь это сделать.Переместите объявление переменной выше switch.

2 голосов
/ 29 января 2014

Мой друг, ты не можешь объявить переменную в операторе switch:

View view, int pos, long id) {
     switch (view.isClickable()) {       
         Spinner spinner2;   <---------------- here is your syntax error 
         case spinner2.setSelection(0):
         startActivity(new Intent(this,To.class));
         break;
         case spinner2.setSelection(1):
         startActivity(new Intent(this,out.class));
         default:
         break;
         }
     }

Вместо этого вы должны перейти выше декларации Spinner:

View view, int pos, long id) {
     Spinner spinner2;  // <---------------- now it's ok
     switch (view.isClickable()) {       

         case spinner2.setSelection(0):
         startActivity(new Intent(this,To.class));
         break;
         case spinner2.setSelection(1):
         startActivity(new Intent(this,out.class));
         default:
         break;
         }
     }

Кстати, в вашем коде вы не инициализируете Spinner ..., вы также должны сделать это так:

Spinner spinner2 = new Spinner(); 
1 голос
/ 09 апреля 2011

Я предполагаю, что view.isClickable() возвращает логическое значение, и в этом случае вы должны использовать if, а не switch.

Тем не менее, что такое case spinner2.setSelection(0): ??

Метка регистра не может вызывать код и не может быть динамической. case метки должны быть константами, целыми числами или значениями перечисления.

Вы также объявляете Spinner spinner2; (и заявляете, что это не в том месте, как указывает Оли), но для него не задано ничего, поэтому ваш spinner2.setSelection(x) будет выдавать исключение NullPointerException, даже если вы можете заставить это выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...