你可以通过追踪列表视图上选中单选按钮的位置ID来实现,现在当你点击另一个单选按钮时,实现setOnCheckedChangeListener(listener)
并检查已经选择的位置,然后取消该单选按钮的选择。
你可以将单选按钮的状态存储到自定义模型中(包含像文本视图、图像视图、单选按钮等控件的模型,用于列表视图单行),然后添加到列表视图中。
请查看此文章,了解如何使用模型,在列表视图中处理组件。其中给出了复选框的示例。
更新
我认为你可以这样获取标签。
((View)((ViewGroup)listview.getItemAtPosition(0)).getTag()).getTag();
or
((Button)l.getItemAtPosition(0)).getTag();
更新2
假设这是您的适配器和ArrayList对象
private List<Model> list_model = new ArrayList<Model>();
private ArrayAdapter<Model> modelAdapter;
private class Model{
private String text1 = "";
private boolean isChecked = false;
public Model(String text1){
this.text1 = text1;
isChecked = false;
}
}
private static class ViewHolder{
TextView textView;
RadioButton radioBtn;
}
private List<Model> list;
private Context context;
public CustomAdapter(Context context, List<Model> list){
super(context,R.layout.list_layout,list);
this.list = list;
this.context = context;
}
getView()
中。@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.gcalendar_list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.text1);
viewHolder.radioBtn = (RadioButton) view.findViewById(R.id.radioBtn);
viewHolder.radioBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkBox.getTag();
element.isChecked = buttonView.isChecked();
boolean isChecked = true;
for(int i=0;i<list.size();i++){
if(!list.get(i).isChecked){
list.get(i).isChecked=false; // more implement here or may be this work
break;
}
}
}
});
view.setTag(viewHolder);
viewHolder.radioBtn.setTag(list.get(position));
}else{
view = convertView;
((ViewHolder)view.getTag()).radioBtn.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.textView.setText(list.get(position).name);
holder.radioBtn.setChecked(list.get(position).isChecked);
return view;
}
当只有一个按钮小部件可供选择时,它是复选框。虽然在配置列表条目视图时需要注册自定义事件监听器,并且要记住这些视图是可重用的(或者如果您不关心性能,则创建新视图)。