2015-12-03 7 views
-1

У меня есть 25 флажок на xml. Я хочу знать, сколько из ящиков в документе проверено. пытался сделать цикл, как это ..Показывает, сколько флажков отмечено в android?

p1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (p1.isChecked()){ 
      palm1=longitude+","+latitude; 
      //Toast.makeText(getBaseContext(), palm1, Toast.LENGTH_SHORT).show(); 
     }else { 
      palm1="health"; 
      //Toast.makeText(getBaseContext(), "uncheck", Toast.LENGTH_SHORT).show(); 
     } 

     percentage(); 

      }}); 




public void percentage(){ 
     Vector<CheckBox> allCheck=new Vector<CheckBox>(); 
     int counterChecked=0; 

     allCheck.add(p1); 
     allCheck.add(p2); 
     allCheck.add(p3); 
     allCheck.add(p4); 
     ................ 
     allCheck.add(p25); 


     for(int i=0; i<allCheck.size();i++) 
       if(allCheck.get(i).isChecked()){ 
       counterChecked++; 
       } 

     double percent = (counterChecked * 100)/allCheck.size(); 
     persen=String.format("%.1f %%", percent); 
     kerusakan= Integer.toString(counterChecked); 
Toast.makeText(getBaseContext(),percent, Toast.LENGTH_SHORT).show(); 

     Toast.makeText(getBaseContext(), kerusakan, Toast.LENGTH_SHORT).show(); 


    } 

, но он говорит, что значения 0. Как узнать, сколько ящиков проверено?

+0

Пожалуйста, пост код, где вы определяете и назначить allCheck –

+0

Где ваш '' p1' в p25' переменных определены и назначены? –

ответ

0

Вы сохранили бы код и время, выполнив OnCheckChangeListener всю свою деятельность. Это должно вызвать любой щелчок на флажке, тогда вы можете создать свою подпрограмму count в реализации метода onCheckChanged.

Что-то вроде этого:

общественный класс YourActivity расширяет активность реализует OnCheckedChangeListener {

... объявить глобальный массив здесь

private CheckBox[] checkboxes; 

.... где-то в onCreate method

checkboxes = new CheckBox[3]; 

    for (int i = 0; i < checkboxes.length; i++) { 
      String checkboxID = "checkBox" + (i + 1); 

      int resID = getResources().getIdentifier(checkboxID, "id", 
        getPackageName()); 
      checkboxes[i] = ((CheckBox) findViewById(resID)); 
      checkboxes[i].setOnCheckedChangeListener(this); 
      allCheckBoxes.add(checkboxes[i]); 
    } 

... и метод коррекции для интерфейса

@Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
    int countOfCheckBoxesChecked = 0; 
    for (CheckBox checkbox : allCheckBoxes) { 
     if (checkbox.isChecked()) { 
     countOfCheckBoxesChecked++; 
     } 
    } 
    Log.i(TAG, "number of checked = " + countOfCheckBoxesChecked); 

    } 
+0

Не удалось обновить это, чтобы использовать 'getResources(). getIdentifier()'; вместо ввода каждой строки вы можете перебрать все флажки - см. здесь, например, http://stackoverflow.com/a/17203591/2308683 –

+0

Спасибо за ваш комментарий @ cricket_007 ... отредактировали образец кода, чтобы использовать цикл и сделать все это DRY ... –

+0

Большое спасибо @ cricket_007 и Marka A .. –

0

Я бы порекомендовал иметь счетчик. Когда пользователь нажмет на флажок, вы проверите, будет ли он проверен или снят. В первом случае вы будете делать counter ++; а во втором - счетчик. Но вы должны показать нам образец вашего кода для более конкретного ответа.

+0

Это означает, что вам нужен слушатель для каждого флажка (возможно, для общего прослушивателя). – user2340612

+0

Да, для каждого флажка здесь должен быть слушатель. – PL13

+0

@ user2340612 Я использовал прослушиватель для каждого флажка, но все же не могу сделать counter ++ .. он дает мне 0 для вывода. –

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