I have a ListView
with own adapter: CityZipCodesAdapter
. In the constructor I give a List<CityZipCodesDataModel>
where I keep String
, String
, and boolen
(the RadioButton
was selected or not). This i write in SharedPreferences
and then I read this. It all works.
public class CityZipCodesAdapter extends ArrayAdapter<CityZipCodesDataModel> {
private final List<CityZipCodesDataModel> list;
private final Activity context;
private RadioButton selectedRB;
private int selectedPosition = -1;
public CityZipCodesAdapter(Activity context,
List<CityZipCodesDataModel> list) {
super(context, R.layout.city_list_item, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView cityOrZipCode;
protected TextView listOfZipCodesInNear;
protected RadioButton radioBtn;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder viewHolder = null;
if (view == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.city_list_item, null);
viewHolder = new ViewHolder();
viewHolder.cityOrZipCode = (TextView) view.findViewById(R.id.cityOrZipCode);
viewHolder.listOfZipCodesInNear = (TextView) view.findViewById(R.id.listOfZipCodesInNear);
viewHolder.radioBtn = (RadioButton)view.findViewById(R.id.radioButton);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag() ;
}
viewHolder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(position != selectedPosition && selectedRB != null){
selectedRB.setChecked(false);
}
selectedPosition = position;
selectedRB = (RadioButton)v;
}
});
if(selectedPosition != position){
viewHolder.radioBtn.setChecked(false);
}else{
viewHolder.radioBtn.setChecked(true);
if(selectedRB != null && viewHolder.radioBtn != selectedRB){
selectedRB = viewHolder.radioBtn;
}
}
viewHolder.listOfZipCodesInNear.setText(list.get(position).getZipCodes());
viewHolder.cityOrZipCode.setText(list.get(position).getLocation());
viewHolder.radioBtn.setText(list.get(position).getLocation());
viewHolder.radioBtn.setChecked(list.get(position).isSelectedLocation());
return view;
}
}
The problem is when i turn on the application then the correct RadioButton
is selected, but it is inactive. There is only displayed correctly.
For example,
x String1
o String2
o String3
When I click on String2 (String1 was inictialy selected) then String2 is selected, but String1 is also selected. When I click on String1, then String2 then the selection is correct.
Do you have any idea what is wrong? Many thanks for your help!