如何获取在 android 中以编程方式编写的选中复选框的选定值?
How can I get the selected value of the checked checkboxes written programmatically in android?
我在android里面有一个程序化写的CheckBox
,它是程序化写的,因为CheckBox
的值会根据网上的内容,所以基本上,程序没有关于要打印多少 CheckBox
的想法。我使用for循环打印复选框,它是成功的,但是在这些复选框中,我想获得将要被选中的CheckBox
的值。
我该怎么做?
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
CheckBox cb = new CheckBox(survey);
cb.setText(ansar[z]);
choiceslayouts.addView(cb);
}
您需要创建一个布尔数组来保存所有复选框的状态
然后为每个 CheckBox
添加 setOnCheckedChangeListener
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
boolean[] array = new boolean[ansar.length];
for (int z = 0; z<ansar.length; z++){
...
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
array[z] = isCheck;
}
});
}
或
您可以为每个 CheckBox
设置 tag
以检查 CheckBox
的状态
1.Implement onClickListener
为你的 Activity
public YourActivity extends Activity implements View.OnClickListener
2.Then 为每个 CheckBox 设置标签
for (int z = 0; z<ansar.length; z++){
...
cb.setTag("tag"+z);
cb.setOnClickListener(this);
}
3.Finnaly,实施onClick
public void onClick(View v) {
switch (v.getTag()) {
case "tag0":
if(((CheckBox) v).isChecked()) {
// your checkbox 0 is checked
}else{
// your checkbox 0 is not checked
}
break;
case "tag1":
// do the same
break;
...
}
}
希望对您有所帮助
我认为您应该使用具有自定义布局和自定义适配器的 ListView or a RecyclerView,以优化性能。无论如何,无需对代码进行重大更改就可以实现所需的功能。
您的问题是,在 for 循环中,您重新创建了一个与前一个复选框具有完全相同属性的新复选框,因此即使您将其添加到您的父视图中,您基本上也是在一遍又一遍地添加相同的复选框,并且您可以' t 监听 "single" 复选框中的事件。
你应该尝试这样的事情:
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
final boolean[] cbValue = new boolean[ansar.length];
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
cb[z] = new CheckBox(survey);
cb[z].setText(ansar[z]);
cb[z].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cbValue[z] = !cbValue[z];
}
});
choiceslayouts.addView(cb[z]);
}
cbValue[]
应该包含您的复选框的值。
这里没有error-checking,但应该能给你思路。
我在android里面有一个程序化写的CheckBox
,它是程序化写的,因为CheckBox
的值会根据网上的内容,所以基本上,程序没有关于要打印多少 CheckBox
的想法。我使用for循环打印复选框,它是成功的,但是在这些复选框中,我想获得将要被选中的CheckBox
的值。
我该怎么做?
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
CheckBox cb = new CheckBox(survey);
cb.setText(ansar[z]);
choiceslayouts.addView(cb);
}
您需要创建一个布尔数组来保存所有复选框的状态
然后为每个 CheckBox
setOnCheckedChangeListener
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
boolean[] array = new boolean[ansar.length];
for (int z = 0; z<ansar.length; z++){
...
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
array[z] = isCheck;
}
});
}
或
您可以为每个 CheckBox
设置 tag
以检查 CheckBox
1.Implement onClickListener
为你的 Activity
public YourActivity extends Activity implements View.OnClickListener
2.Then 为每个 CheckBox 设置标签
for (int z = 0; z<ansar.length; z++){
...
cb.setTag("tag"+z);
cb.setOnClickListener(this);
}
3.Finnaly,实施onClick
public void onClick(View v) {
switch (v.getTag()) {
case "tag0":
if(((CheckBox) v).isChecked()) {
// your checkbox 0 is checked
}else{
// your checkbox 0 is not checked
}
break;
case "tag1":
// do the same
break;
...
}
}
希望对您有所帮助
我认为您应该使用具有自定义布局和自定义适配器的 ListView or a RecyclerView,以优化性能。无论如何,无需对代码进行重大更改就可以实现所需的功能。 您的问题是,在 for 循环中,您重新创建了一个与前一个复选框具有完全相同属性的新复选框,因此即使您将其添加到您的父视图中,您基本上也是在一遍又一遍地添加相同的复选框,并且您可以' t 监听 "single" 复选框中的事件。 你应该尝试这样的事情:
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
final boolean[] cbValue = new boolean[ansar.length];
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
cb[z] = new CheckBox(survey);
cb[z].setText(ansar[z]);
cb[z].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cbValue[z] = !cbValue[z];
}
});
choiceslayouts.addView(cb[z]);
}
cbValue[]
应该包含您的复选框的值。
这里没有error-checking,但应该能给你思路。