I have searched the question over and over, there are many questions I have found in stackoverflow but I did not come up with a solution. Here is my problem.
I have a list of item in a linearlayout like this:
When the screen comes first, the last radion button is selected automatically. But if I select another radio button, the last radio button is already in selected state. I want to select only one radion button but at the same time when the screen comes first the last radio button will be auto selected and other automatically will not be selected. How can I achieve this. My adapter class is :
public class AdapterPaymentMethod extends ArrayAdapter<PaymentData> {
private Context context;
private boolean userSelected = false;
ViewHolder holder;
public AdapterPaymentMethod(Context context, int resource,
List<PaymentData> items) {
super(context, resource, items);
this.context = context;
}
/* private view holder class */
private class ViewHolder {
RadioButton radioBtn;
Button btPaymentMethod;
// ImageView ivLine;
}
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
PaymentData rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(
com.android.paypal.homeactivity.R.layout.list_item, null);
holder = new ViewHolder();
holder.radioBtn = (RadioButton) convertView
.findViewById(com.android.paypal.homeactivity.R.id.rdb_payment_method);
holder.btPaymentMethod = (Button) convertView
.findViewById(com.android.paypal.homeactivity.R.id.bt_item_event);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
if(position==getCount()-1 && userSelected==false){
holder.radioBtn.setChecked(true);
Log.d("if position", ""+position);
}
else{
holder.radioBtn.setChecked(false);
Log.d("else position", ""+position);
}
holder.radioBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
userSelected=true;
if(getCount()-1==position&&userSelected==true){
}
else if(getCount()-2==position&&userSelected==true)
{
holder.radioBtn.setChecked(true);
}
}
});
holder.radioBtn.setText(rowItem.getRdbText());
holder.btPaymentMethod.setText(rowItem.getBtText());
return convertView;
}
}
Keep the currently checked RadioButton
in a variable in your Activity
. In the OnClickListener
of your RadioButtons
do this:
// checks if we already have a checked radiobutton. If we don't, we can assume that
// the user clicked the current one to check it, so we can remember it.
if(mCurrentlyCheckedRB == null)
mCurrentlyCheckedRB = (RadioButton) v;
mCurrentlyCheckedRB.setChecked(true);
}
// If the user clicks on a RadioButton that we've already stored as being checked, we
// don't want to do anything.
if(mCurrentlyCheckedRB == v)
return;
// Otherwise, uncheck the currently checked RadioButton, check the newly checked
// RadioButton, and store it for future reference.
mCurrentlyCheckedRB.setChecked(false);
((RadioButton)v).setChecked(true);
mCurrentlyCheckedRB = (RadioButton)v;
Here's my code:
ListAdapter.java
public class ListAdapter extends BaseAdapter {
private Context context;
private String[] version;
private LayoutInflater inflater;
private RadioButton selected = null;
public ListAdapter(Context context, String[] version) {
this.context = context;
this.version = version;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return version.length;
}
@Override
public Object getItem(int position) {
return version;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
final Holder holder;
if (view == null) {
holder = new Holder();
view = inflater.inflate(R.layout.row_list, null);
holder.radioButton = (RadioButton) view.findViewById(R.id.radio1);
holder.textViewVersion = (TextView) view.findViewById(R.id.textView1);
holder.btnMore = (Button) view.findViewById(R.id.button1);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.textViewVersion.setText(version[position]);
//by default last radio button selected
if (position == getCount() - 1) {
if (selected == null) {
holder.radioButton.setChecked(true);
selected = holder.radioButton;
}
}
holder.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
holder.radioButton.setChecked(true);
selected = holder.radioButton;
}
});
}
private class Holder {
private RadioButton radioButton;
private TextView textViewVersion;
private Button btnMore;
}
}
Hope this helps you :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With