2012-05-04 2 views
0

У меня есть программа с 50 + флажками на одной странице. И мне нужно проверить, какие поля выбраны.Отметьте, у кого установлен флажок

Я знаю, что могу сделать somehting так:

CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox1); 
CheckBox cb2 = (CheckBox) findViewById(R.id.checkBox2); 

if (cb1.isChecked){ 
//get Checkbox name 
} 
if (cb2.isChecked){ 
//get Checkbox name 
} 

Но если я должен сделать это с более чем 50 флажков, что бы занять некоторое время. Является ли их более быстрый способ проверить, какой из них выбран? Что-то вроде:

int i; 

for (i = 0; i<checkBox.length; i++){ 
    CheckBox cb+i = (CheckBox) findViewById (R.id.checkBox+i); 

    if (cb+i.isChecked){ 
    //get Checkbox name 
    } 
} 

Возможно, также хорошо сказать: вы можете выбрать более 1 флажка. Надеюсь, вы знаете, что я имею в виду.

Благодаря уже Bigflow

+0

Не находятся ли они в контейнере, чтобы вы могли пройти через них дети контейнера и проверить, является ли тип CheckBox, и проверяет, проверено ли оно? – DaTroop

+1

Вы должны пойти в CheckedListView, он вернет позицию выбранного. Не очень хорошая практика добавить 50+ флажок в свой макет –

ответ

1

Другой способ может быть:

Предположим, что вы добавили CheckBox в LinearLayout, и вы можете получить LinearLayout ссылку на Java и получить ребенка Просмотров как это:

LinearLayout layout= (LinearLayout)findViewById(R.id.checkbox_container); 
ArrayList values = new ArrayList(); 
for(int i=0; i<layout.getChildCount(); i++) 
{ 
    View v = layout.getChildAt(i); 
    if(v instanceof CheckBox) 
    { 
     CheckBox cb = (CheckBox)v; 
     if(cb.isChecked()) 
     values.add(cb.getText().toString()); 
    } 
} 
+0

Эй, я использовал этот. Пришлось изменить I немного, потому что я получил: <Относительное расположение Bigflow

+0

Может быть глупый вопрос, но: Я также получил TableRow1, TableRow2 и т.д. Но только 1 TableLayout (все строки находятся внутри этого TableLayout, как я могу проверить внутри всех TableRows в TableLayout? – Bigflow

0

Вы можете сделать массив из CheckBox и чем добавить их в код, чтобы вы макет

CheckBox[] achecker = new CheckBox[50]; 
achercker[0] = new CheckBox(context); 

или с ArrayList лучше, когда вы не знаете, как много CheckBoxes вы потребуется

ArrayList<CheckBox> lchecker = new ArrayList<CheckBox>(); 
lchecker.add(new CheckBox(context)); 
0

установить слушателя на свои флажки. checkbox1.setOnCheckChangedListener(this) затем переопределить

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ 
if (isChecked){ 
      // to determine which checkbox use buttonView.getId(); 
     } 
} 
+0

, так что вы предлагаете ему добавить слушателя, чтобы сказать 50 'CheckBox'? –

0

Вы можете попробовать это ниже, установить ID по количеству:

ArrayList<Boolean> booleanList = new ArrayList<Boolean>();

for(int counter=0; counter<50; counter++) { 
     booleanList.add(false); 
     CheckBox chkBox = new CheckBox(this); 
     chkBox.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1)); 
     chkBox.setId(counter); 
     chkBox.setOnClickListener(chkBoxOnClickListener); 
} 

private OnClickListener chkBoxOnClickListener = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     int chkboxID = ((CheckBox)view).getId(); 
     chkBox = (CheckBox) findViewById(chkboxID); 
      if(chkBox.isChecked()) { 
       booleanList.set(chkBox, true); 
      } 

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