Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android动态获取复选框值_Java_Android_Dynamic - Fatal编程技术网

Java android动态获取复选框值

Java android动态获取复选框值,java,android,dynamic,Java,Android,Dynamic,你好,我是一名学生,我的项目是由android studio制作一个应用程序 我只是个初学者,所以一切都很困难:( 这是我的问题。 我根据当前设置动态创建了复选框 如果用户单击btnEx按钮,我想获取finalMemberTag 但在这段代码中,当我单击btnEx时,finalMemberTag为null 我希望如果用户单击复选框,将复选框的文本添加到finalMemberTag。 如果复选框未选中,则将复选框的文本删除到finalMemberTag 我该怎么做? (我已经设置了可绘制的东西。)

你好,我是一名学生,我的项目是由android studio制作一个应用程序

我只是个初学者,所以一切都很困难:(

这是我的问题。

我根据当前设置动态创建了复选框

如果用户单击btnEx按钮,我想获取finalMemberTag

但在这段代码中,当我单击btnEx时,finalMemberTag为null

我希望如果用户单击复选框,将复选框的文本添加到finalMemberTag。 如果复选框未选中,则将复选框的文本删除到finalMemberTag

我该怎么做? (我已经设置了可绘制的东西。)

请帮帮我



好的,您的代码有一些问题:

首先,finalMemberTag始终为null,因为您从未初始化过它。如果您想使用字符串数组,并且希望将文本存储在复选框中,那么我们应该假设您最多会选中所有复选框(16)。这意味着您要将数组初始化为:

私有字符串[]finalMemberTag=新字符串[16]

其次,我认为最好使用字符串集来避免重复,或者,如果需要特定索引的信息,可以使用arraylist

与设置:

 private Set<String> finalMembersTag  =  new HashSet<>(16);
 //onCreate...other stuff...for loop
 //...setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         final String buttonText = buttonView.getText().toString();
         if (isChecked) {
             // other stuff ...
             finalMembersTag.add(buttonText);
         } else {
             // other stuff ...
             finalMembersTag.remove(buttonText);
         }
     }
private Set finalMembersTag=新哈希集(16);
//为循环创建其他内容
//…setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
最后一个字符串buttonText=buttonView.getText().toString();
如果(已检查){
//其他东西。。。
添加(按钮文本);
}否则{
//其他东西。。。
finalMembersTag.remove(按钮文本);
}
}
使用ArrayList:

 private List<String> finalMembersTag  =  new ArrayList<>(16);
 //onCreate...other stuff...for loop
  int index = i;
  chA.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         final String buttonText = buttonView.getText().toString();
         if (isChecked) {
             // other stuff ...
             finalMembersTag.add(buttonText); //this will add the text
         } else {
             // other stuff ...
             finalMembersTag.remove(buttonText); //this will remove the element if found, or if you want an empty string you can do finalMembersTag.add(index, "");
         }
     }
private List finalMembersTag=新的ArrayList(16);
//为循环创建其他内容
int指数=i;
chA.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
最后一个字符串buttonText=buttonView.getText().toString();
如果(已检查){
//其他东西。。。
finalMembersTag.add(buttonText);//这将添加文本
}否则{
//其他东西。。。
finalMembersTag.remove(buttonText);//如果找到该元素,将删除该元素;如果需要空字符串,则可以执行finalMembersTag.add(index,“”);
}
}

您好,我非常感谢您的友好回答。我尝试了一下,效果很好。(点击复选框几下)当我多次单击复选框时,会出现一个错误,如java.lang.IndexOutOfBoundsException。您能告诉我如何解决此问题吗?我搜索了它,但不知道为什么我的索引大于大小。我更新了我的答案。是的,您必须小心使用索引进行删除,数组将更短,我更改了答案,以便您使用
finalMembersTag.remove(buttonText)
。此外,在索引不存在的情况下添加某些内容也会出现相同的错误,因此最好使用
finalMembersTag.add(buttonText)
,在您的特定情况下不使用索引,效果很好。非常感谢!!!!!!!!!!!
    java.lang.IndexOutOfBoundsException: Index: 5, Size: 2
 private Set<String> finalMembersTag  =  new HashSet<>(16);
 //onCreate...other stuff...for loop
 //...setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         final String buttonText = buttonView.getText().toString();
         if (isChecked) {
             // other stuff ...
             finalMembersTag.add(buttonText);
         } else {
             // other stuff ...
             finalMembersTag.remove(buttonText);
         }
     }
 private List<String> finalMembersTag  =  new ArrayList<>(16);
 //onCreate...other stuff...for loop
  int index = i;
  chA.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         final String buttonText = buttonView.getText().toString();
         if (isChecked) {
             // other stuff ...
             finalMembersTag.add(buttonText); //this will add the text
         } else {
             // other stuff ...
             finalMembersTag.remove(buttonText); //this will remove the element if found, or if you want an empty string you can do finalMembersTag.add(index, "");
         }
     }