How To Handle Oncheckedchangelistener For A Radiogroup In A Custom Listview Adapter
I am developing an app which has a list view with custom layout as follows : It has 4 RadioButtons in RadioGroup and a TextView. Actually, it ll be shown as question(TextView) and
Solution 1:
It's easy to adapt that tutorial so you can use a RadioGroup
instead of a CheckBox
. Bellow is an example(I used a RadioGroup
with 4 RadioButton
). First of all you'll have to modify the Model
class so it can hold the new data:
publicclassModel {
String question; // hold the questionint current = NONE; // hold the answer picked by the user, initial is NONE(see below)publicstaticfinalint NONE = 1000; // No answer selectedpublicstaticfinalint ANSWER_ONE_SELECTED = 0; // first answer selectedpublicstaticfinalint ANSWER_TWO_SELECTED = 1; // second answer selectedpublicstaticfinalint ANSWER_THREE_SELECTED = 2; // third answer selectedpublicstaticfinalint ANSWER_FOUR_SELECTED = 3; // forth answer selectedpublicModel(String question){
this.question = question;
}
}
Then modify the getView()
method to set the views according to the model:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder = null;
if (v == null) {
v = inflater.inflate(R.layout.the_row, parent, false);
holder = new ViewHolder(v);
v.setTag(holder);
holder.group
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
publicvoidonCheckedChanged(RadioGroup group,
int checkedId) {
Integer pos = (Integer) group.getTag(); // To identify the Model object i get from the RadioGroup with getTag()// an integer representing the actual position
Model element = list.get(pos);
switch (checkedId) { //set the Model to hold the answer the user pickedcase R.id.answer0:
element.current = Model.ANSWER_ONE_SELECTED;
break;
case R.id.answer1:
element.current = Model.ANSWER_TWO_SELECTED;
break;
case R.id.answer2:
element.current = Model.ANSWER_THREE_SELECTED;
break;
case R.id.answer3:
element.current = Model.ANSWER_FOUR_SELECTED;
break;
default:
element.current = Model.NONE; // Something was wrong set to the default
}
}
});
} else {
holder = (ViewHolder) v.getTag();
}
holder.group.setTag(new Integer(position)); // I passed the current position as a tag
holder.t.setText(list.get(position).question); // Set the question bodyif (list.get(position).current != Model.NONE) {
RadioButton r = (RadioButton) holder.group.getChildAt(list
.get(position).current);
r.setChecked(true);
} else {
holder.group.clearCheck(); // This is required because although the Model could have the current // position to NONE you could be dealing with a previous row where// the user already picked an answer.
}
return v;
}
and then ViewHolder
class:
classViewHolder {
TextView t = null;
RadioGroup group;
ViewHolder(View v) {
t = (TextView) v.findViewById(R.id.textView1);
group = (RadioGroup) v.findViewById(R.id.group_me);
}
}
The xml layout with a RadioGroup
:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><RadioGroupandroid:id="@+id/group_me"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/answer0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"android:text="Ans0" /><RadioButtonandroid:id="@+id/answer1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"android:text="Ans1" /><RadioButtonandroid:id="@+id/answer2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"android:text="Ans2" /><RadioButtonandroid:id="@+id/answer3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"android:text="Ans3" /></RadioGroup></LinearLayout>
Post a Comment for "How To Handle Oncheckedchangelistener For A Radiogroup In A Custom Listview Adapter"