2015-05-31 2 views
1

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

Когда я объявляю cb в качестве локальной переменной, как commeted я получаю две ошибки:

Конечное локальная переменная центибар уже может быть назначен

Не может вызывать IsChecked() на примитивном типа междунар

 private void createCheckboxList(final ArrayList<Integer> items) { 
       final CheckBox cb; 

       final LinearLayout ll = (LinearLayout) findViewById(R.id.lila); 
       for (int i = 0; i < items.size(); i++) { 

     //here I am getting `The final local variable cb may already have been assigned` 

        cb = new CheckBox(this); 
        cb.setText(String.valueOf(items.get(i))); 
        cb.setId(i); 
        ll.addView(cb); 

       } 
       Button btn = new Button(this); 
       btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150)); 
       btn.setText("submit"); 
       ll.addView(btn); 

       btn.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         for (int i : items) { 
         // here I am getting `Cannot invoke isChecked() on the primitive type int 
     ` 
          if (cb.getId().isChecked()) { 

          } 
         } 

        } 
       }); 

      } 

ответ

3

Вы объявили переменную как окончательный (не может быть изменен один раз установить):

final CheckBox cb; 

Вам нужно либо установить значение в этой точке, либо удалить последний модификатор (ваш цикл попытается присвоить значение более одного раза).

Что касается другого вопроса:.

if (cb.getId().isChecked()) 

При добавлении .isChecked() после .getId() это короткий способ сказать, «вызвать этот метод на возвращенном объекте первого метода

Ошибка что метод не возвращает объект, а примитивный тип (int). Вы должны вызвать второй метод на объекте Checkbox, попробуйте что-то вроде:

((CheckBox)v).isChecked(); 

Или, если у вас уже есть ID:

((CheckBox) findViewById(id)).isChecked(); 
+0

Вам не нужно устанавливать значение в точке объявления. Но вы можете назначить его только один раз. – Thilo

+0

Это правда - я добавил ясность, чтобы сделать это яснее. – Mikaveli

+0

@Mikaveli: мне нужно использовать для Loop 'for (int i: items) {}' в методе onClick? – MrPencil

Смежные вопросы