ListView 中显示自定义单选列表,实现单选效果(左文字,右图片)
2014-11-21 15:06
776 查看
有时候项目中会遇到各种各样的设计与需求,把这两天在工作中涉及到的有点小问题的总结下
1.单选不互斥
public class Single_choice_adapter extends BaseAdapter {
private Context context;
private String[] list;
private HashMap<String, Boolean> states = new HashMap<String, Boolean>();// 用于记录每个RadioButton的状态,并保证只可选一个
private TextView test;
onRadioButtonClickListners radioButtonClickListner;
public Single_choice_adapter(Context context, String[] strings,
TextView test) {
super();
this.context = context;
this.list = strings;
this.test = test;
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int arg0) {
return list[arg0];
}
@Override
public long getItemId(int arg0) {
return arg0;
}
private class ViewHolder {
private TextView name;
private LinearLayout lin;
private RadioButton radioButton;
}
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
final ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.single_choice, arg2, false);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.single_name);
viewHolder.lin = (LinearLayout) convertView.findViewById(R.id.add);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final RadioButton radioButton = (RadioButton) convertView
.findViewById(R.id.radioBtn);
viewHolder.radioButton = radioButton;
viewHolder.name.setText(list[position]);
viewHolder.radioButton.setTag(position);
viewHolder.radioButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
for (String key : states.keySet()) {
states.put(key, false);
}
states.put(String.valueOf(position), radioButton.isChecked());
Single_choice_adapter.this.notifyDataSetChanged();
test.setText(list[position]);
int position = (Integer) viewHolder.radioButton.getTag();
radioButtonClickListner.onRadioButtonCallBacks(position, arg0);
}
});
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;
viewHolder.radioButton.setChecked(res);
return convertView;
}
public void setRadioButtonCallBacks(
onRadioButtonClickListners radioButtonClickListners) {
this.radioButtonClickListner = radioButtonClickListners;
}
public interface onRadioButtonClickListners {
void onRadioButtonCallBacks(int position, View v);
}
}
1.单选不互斥
public class Single_choice_adapter extends BaseAdapter {
private Context context;
private String[] list;
private HashMap<String, Boolean> states = new HashMap<String, Boolean>();// 用于记录每个RadioButton的状态,并保证只可选一个
private TextView test;
onRadioButtonClickListners radioButtonClickListner;
public Single_choice_adapter(Context context, String[] strings,
TextView test) {
super();
this.context = context;
this.list = strings;
this.test = test;
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int arg0) {
return list[arg0];
}
@Override
public long getItemId(int arg0) {
return arg0;
}
private class ViewHolder {
private TextView name;
private LinearLayout lin;
private RadioButton radioButton;
}
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
final ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.single_choice, arg2, false);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.single_name);
viewHolder.lin = (LinearLayout) convertView.findViewById(R.id.add);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final RadioButton radioButton = (RadioButton) convertView
.findViewById(R.id.radioBtn);
viewHolder.radioButton = radioButton;
viewHolder.name.setText(list[position]);
viewHolder.radioButton.setTag(position);
viewHolder.radioButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
for (String key : states.keySet()) {
states.put(key, false);
}
states.put(String.valueOf(position), radioButton.isChecked());
Single_choice_adapter.this.notifyDataSetChanged();
test.setText(list[position]);
int position = (Integer) viewHolder.radioButton.getTag();
radioButtonClickListner.onRadioButtonCallBacks(position, arg0);
}
});
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;
viewHolder.radioButton.setChecked(res);
return convertView;
}
public void setRadioButtonCallBacks(
onRadioButtonClickListners radioButtonClickListners) {
this.radioButtonClickListner = radioButtonClickListners;
}
public interface onRadioButtonClickListners {
void onRadioButtonCallBacks(int position, View v);
}
}
相关文章推荐
- listView 与自定义checkBox 实现多选效果,并记录多选的结果(左文字,右图片)
- [安卓] 16、ListView和GridView结合显示单元实现自定义列表显示效果
- jq实现左侧显示图片右侧文字滑动切换效果
- 实现自定义view(2):仿Android QQ多屏幕显示ListView的效果
- 实现如下图所示的列表文字切换图片的效果
- android之ListView和adapter配合显示图片和文字列表
- android之ListView和adapter配合显示图片和文字列表
- 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
- 使用ListView和AsyncTask、fastjson解析Json以及适配器BaseAdapter来实现下载网络的图片以及文字并显示出来
- 自定义listview 实现仿qq聊天列表左滑删除效果
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- 实现仿照微信聊天气泡里显示图片效果的自定义View
- 如何实现文字加透明背景显示在一张图片的底部的效果
- 自定义组件---图片和文字实现ImageButton效果
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- android之ListView和adapter配合显示图片和文字列表
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- jq实现左侧显示图片右侧文字滑动切换效果