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