private Context context;
private List<HashMap<String, Object>> userList;
public RadioAdapter(Context context, ArrayList<HashMap<String, Object>> mListItems)
{
this.context = context;
this.userList= mListItems;
}
@Override
public int getCount() {
return userList.size();
}
@Override
public Object getItem(int position) {
return userList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.set_rline_list_item, null);
holder = new ViewHolder();
holder.background = (RelativeLayout) convertView.findViewById(R.id.rline_list_item);
holder.userName = (TextView) convertView.findViewById(R.id.title_line);
convertView.setTag(holder);
}else{
holder=(ViewHolder) convertView.getTag();
}
final RadioButton radio=(RadioButton) convertView.findViewById(R.id.radio_btn);
holder.rdBtn = radio;
holder.userName.setText((String)userList.get(position).get("Title"));
//当RadioButton被选中时,将其状态记录进States中,并更新其他RadioButton的状态使它们不被选中
/* holder.rdBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//重置,确保最多只有一项被选中
for(String key:states.keySet()){
states.put(key, false);
}
states.put(String.valueOf(position), radio.isChecked());
RlineAdapter.this.notifyDataSetChanged();
}
}); */
boolean res=false;
if(states.get(String.valueOf(position)) == null || states.get(String.valueOf(position))== false){
res=false;
states.put(String.valueOf(position), false);
}
else
res = true;
holder.rdBtn.setChecked(res);
return convertView;
}
class ViewHolder {
RelativeLayout background;
TextView userName;
RadioButton rdBtn;
}
}
更新RadioButton的状态:
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
final RadioButton radio=(RadioButton) arg1.findViewById(R.id.radio_btn);
//重置,确保最多只有一项被选中
for(String key:states.keySet()){
states.put(key, false);
}
states.put(String.valueOf(position), radio.isChecked()?false:true);
setObject("rlineStates",states);
mAdapter.notifyDataSetChanged();
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rline_list_item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip" >
<TextView
android:id="@+id/title_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:textSize="22sp"
android:textColor="@color/white"
/>
<RadioButton
android:id="@+id/radio_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/title_line"
android:layout_alignParentRight="true"
android:focusable="false" //否则将覆盖item的click事件
android:clickable="false"
android:padding="0dp"/>
</RelativeLayout>