[英]Remove element from arraylist on checking and then unchecking the checkbox of checkbox listview
我有一个动态复选框列表视图。 在选择多个复选框时,我得到了正确的数组列表,但是当我一个一个地选中两个复选框然后取消选中一个复选框时,它应该选中一个复选框,但它正在选中前一个选中的两个复选框。
rd_student.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value=objects.get(position).getUserName();
dbs=new DataBeanStudent();
//is chkIos checked?
if (((CheckBox) v).isChecked()) {
if (stringArray.contains(value)){
Toast.makeText(context, "Already added", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Added", Toast.LENGTH_SHORT).show();
stringArray.add(value);
selectedStrings.add(value);
dbs.setUserName(value);
studentArray.add(dbs);
saveDataInSP(stringArray, finalV, studentArray);
}
}else
{
if (stringArray.contains(value)){
selectedStrings.remove(value);
stringArray.remove(value);
studentArray.remove(value);
Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Already Removed", Toast.LENGTH_SHORT).show();
}
}
}
});
对于 arraylist,我有一种方法getSelectedString()
并且在取消选择复选框后我没有得到正确的列表。
ArrayList<String> getSelectedString(){
return selectedStrings;
}
在saveDataInSP(ArrayList<String> stringArray, View view, ArrayList<DataBeanStudent> studentArray)
调用getSelectedString()
saveDataInSP(ArrayList<String> stringArray, View view, ArrayList<DataBeanStudent> studentArray)
private void saveDataInSP(ArrayList<String> stringArray, View view, ArrayList<DataBeanStudent> studentArray)
{
Gson gson = new GsonBuilder().create();
JsonArray myCustomArray = gson.toJsonTree(stringArray).getAsJsonArray();
JsonArray studentArray1 = gson.toJsonTree(studentArray).getAsJsonArray();
stringArray = getSelectedString();
Log.e("stringarray",stringArray.toString());
String jsonText = gson.toJson(stringArray);
sp_dairy = view.getContext().getSharedPreferences(PREFS_DAIRY, 0);
se_dairy = sp_dairy.edit();
se_dairy.clear();
se_dairy.putString("dairy", ""+myCustomArray);
se_dairy.putString("studentArray", ""+studentArray1);
se_dairy.putString("string_array", ""+jsonText);
se_dairy.commit();
}
检查下图。
![Screenshot][1]
![Screenshot][2]
![Screenshot][3]
![Screenshot][4]
不要将 OnClickListener 用于 Checkbox,请使用 OnCheckedChangeListener。
rd_student.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String value=objects.get(position).getUserName();
dbs=new DataBeanStudent();
//is chkIos checked?
if (isChecked) {
if (stringArray.contains(value)){
Toast.makeText(context, "Already added", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Added", Toast.LENGTH_SHORT).show();
stringArray.add(value);
selectedStrings.add(value);
dbs.setUserName(value);
studentArray.add(dbs);
saveDataInSP(stringArray, finalV, studentArray);
}
}else
{
if (stringArray.contains(value)){
selectedStrings.remove(value);
stringArray.remove(value);
studentArray.remove(value);
Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Already Removed", Toast.LENGTH_SHORT).show();
}
}
}
});
同样,当我们使用 ListView 或 RecyclerView 时,子视图会被回收。 因此,请始终将其包含在您的适配器中,在上述代码之后。 (假设上面的代码也在适配器中。)
if(stringArray.contains(value))
rd_student.setChecked(true);
else
rd_student.setChecked(false);
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.