我有ListView
个自己的适配器:CityZipCodesAdapter
。在构造函数中,我提供List<CityZipCodesDataModel>
,我保留String
,String
和boolen
(RadioButton
是否已选中)。我写在SharedPreferences
然后我读了这个。一切正常。
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;
}
}
问题是当我打开应用程序时,选择了正确的RadioButton
,但它处于非活动状态。只有正确显示。
例如,
x String1
o String2
o String3
当我单击String2(选择了String1)时,选择了String2,但也选择了String1。当我单击String1,然后单击String2时,选择是正确的。
你知道出了什么问题吗? 非常感谢你的帮助!
答案 0 :(得分:1)
如果您只需要一个单选按钮来显示可点击状态,那么您必须手动删除其他...我的意思是:
...的onclick
radio2.setChecked(true);
radio1.setChecked(false);
radio3.setChecked(false);
否则你设置你想要设置的任何东西,但是你不要取消其他的... 如果他们都处于相同的位置......它应该很简单......
至于更改其他职位我不认为你所做的工作会有效...我认为每次点击后你需要重建你的列表视图和每个职位变更......或者使用notifyDataSetChanged()
或类似的东西该...
为你找到了这个
Custom Listview with CheckBox single selection
认为这会有所帮助......
答案 1 :(得分:1)
我认为问题出在代码的这一部分:
if(selectedPosition != position){
viewHolder.radioBtn.setChecked(false);
}else{
viewHolder.radioBtn.setChecked(true);
if(selectedRB != null && viewHolder.radioBtn != selectedRB){
selectedRB = viewHolder.radioBtn;
}
}
最初selectedPosition != position
因此永远不会设置selectedRB
并保持为空。当你最初点击第一个单选按钮时,它会被设置并且它可以正常工作,但如果你没有,代码就不会取消它。