here is adapter class.....
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder holder=null;
Student temp = (Student) getItem(position);
if (convertView == null)
{
convertView = mInflator.inflate(R.layout.item_class_student, null);
holder = new ViewHolder();
holder.nameTextView = (TextView) convertView.findViewById(R.id.row_student_name);
holder.classTextView = (TextView) convertView.findViewById(R.id.row_student_class);
holder.rollNumberTextView = (TextView) convertView.findViewById(R.id.row_student_roll_number);
holder.image = (ImageView) convertView.findViewById(R.id.row_student_image);
//holder.checkBox=(CheckBox) convertView.findViewById(R.id.cb_student_selected);
holder.mgroup=(RadioGroup) convertView.findViewById(R.id.rg_list);
holder.pre=(RadioButton) convertView.findViewById(R.id.rb_present);
holder.abs=(RadioButton) convertView.findViewById(R.id.rb_absent);
holder.leave=(RadioButton) convertView.findViewById(R.id.rb_leave);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
//Student temp = (Student) getItem(position);
holder.nameTextView.setText(temp.getName());
holder.rollNumberTextView.setText("Roll No: " + temp.getRollNumber());
holder.classTextView.setText(temp.getStudClass() + "");
if(!flag)
{
holder.mgroup.setVisibility(View.GONE);
}
// Set Image
if (temp.getPhoto() != null)
{
mImageLoader.displayImage(temp.getPhoto(), holder.image, mOptions);
}
else
{
holder.image.setImageResource(R.drawable.img_default_profile);
}
if(temp.isChecked())
{
holder.abs.setChecked(true);
holder.pre.setChecked(false);
holder.leave.setChecked(false);
//Toast.makeText(activity, "A", Toast.LENGTH_SHORT).show();
}
else if(temp.isChecked())
{
holder.abs.setChecked(false);
holder.pre.setChecked(true);
holder.leave.setChecked(false);
//Toast.makeText(activity, "P", Toast.LENGTH_SHORT).show();
}
else if(temp.isChecked())
{
holder.abs.setChecked(false);
holder.pre.setChecked(false);
holder.leave.setChecked(true);
//Toast.makeText(activity, "L", Toast.LENGTH_SHORT).show();
}
holder.mgroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
View radioButton = group.findViewById(checkedId);
int radioId = group.indexOfChild(radioButton);
boolean checked = ((RadioButton) radioButton).isChecked();
System.out.println("ID" + radioButton.getId());
switch (radioId)
{
case R.id.rb_present:
if(checked)
{
flagPresent[position]=true;
flagAbsent[position]=false;
flagLeave[position]=false;
}
break;
case R.id.rb_absent:
if(checked)
{
flagPresent[position]=false;
flagAbsent[position]=true;
flagLeave[position]=false;
}
break;
case R.id.rb_leave:
if(checked)
{
flagPresent[position]=false;
flagAbsent[position]=false;
flagLeave[position]=true;
}
break;
}
//students.set(position, temp);
//refreshList(students, position);
}
});
return convertView;
}
And this is Sudent Modal Class where data is ro be set.....
public class Student implements Parcelable {
private String name;
private String rollNumber;
private String regId;
private String studClass;
private String photo;
private boolean checked;
private String status;
public Student() {
}
public Student(Parcel in) {
this.name = in.readString();
this.rollNumber = in.readString();
this.regId = in.readString();
this.studClass = in.readString();
this.photo = in.readString();
}
/**
* @return the checked
*/
public boolean isChecked()
{
return checked;
}
public void setChecked(boolean checked)
{
this.checked = checked;
}
You need some way of setting the checked state for each RadioButton to distinguish if it's in the correct row or not. You can use getTag()/setTag() for that. I have an ExpandableListView so I store the child row id that I have in a separate "child" class for each object.
So I have something like holder.myRG.setTag(childId); after first getting that id at the beginning of getView(). You could probably use the position.
Before setting this, I set my RadioGroups checked button to -1 so nothing is checked each time then I check a HashMap<String, Boolean> to see if that item is there and if it is true. Items are added to the map in onCheckedChanged() if it is checked.
Here is an example of what I'm doing.
@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild,
View convertView, ViewGroup parentView)
{
final FormItemHolder holder;
View view = convertView;
// here I get the id
final String childId = mList.get(groupPosition).getChildren()
.get(childPosition).mId;
// I set the listener to null and uncheck both buttons--you may not need this
holder.rgCompliance.setOnCheckedChangeListener(null);
holder.rgCompliance.check(-1);
// in my listener, I add a reference to the button in a map declared in another class
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
String uid = (String) holder.myRG.getTag();
currentInspectionFormItem = InspectionFormData.getItemById(uid);
if (checkedId == R.id.rbCompliant)
{
myMap.put(uid, true);
}
else if ((checkedId == R.id.rbNotCompliant && show))
{
if (myMap.get(uid) == null
|| (InspectionFormData.complianceList.get(uid) != null
&& InspectionFormData.complianceList.get(uid)))
{
myMap.put(uid, false);
}
}
}
});
// here I check to see if the buttons id has been put in the list
// if it is present then I check the button accordingly
Boolean present = myMap.get(childId);
if (present != null)
{
if (holder.myRG.getCheckedRadioButtonId() != -1)
holder.myRG.setOnCheckedChangeListener(null);
holder.myRG.check((present.booleanValue()) ? holder.rb1.getId() : holder.rb2.getId());
}
}
I'm doing a lot more than what's shown but I think I pulled out the relevant parts.
I had also faced same problem , but i had solved it ,I think you can just use code which is in same way as the code i am writing code is :- ///done is your final calculation button
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int child=listView.getChildCount();
for(int i=0;i<child;i++) {
View rgg=listView.getChildAt(i);
radioGroup = (RadioGroup) rgg.findViewById(R.id.radio);
int selectedId=radioGroup.getCheckedRadioButtonId();
radioButton = (RadioButton) rgg.findViewById(selectedId);
}
}
});
来源:https://stackoverflow.com/questions/26018245/checking-radiobutton-of-radiogroup-in-listview-checks-other-item-button