我有一个包含大约 10 个列表项的 ListView。在每个列表项中,我都有一个复选框。一次,我只想选中一个复选框。
如果我选择第 1 行,则应取消选中其余 9 个复选框,依此类推。
请建议我一个解决方案。
目前,当列表滚动时我正在努力解决这个问题
我有一个包含大约 10 个列表项的 ListView。在每个列表项中,我都有一个复选框。一次,我只想选中一个复选框。
如果我选择第 1 行,则应取消选中其余 9 个复选框,依此类推。
请建议我一个解决方案。
目前,当列表滚动时我正在努力解决这个问题
你应该做的是你应该跟踪最后一个检查的项目,并在ListView
'sonItemClickListener
中,setChecked(true);
当前项目和setChecked(false);
最后一个; 像这样的东西:
ListView myListView = (ListView)findViewById(/* id of listView */);
CheckBox lastChecked = null;
myListView.setOnItemClickListener(new onItemClickListener(
@Override
onItemClick(AdapterView arg0, View childView, int pos) {
if(lastChecked != null) {
lastCheckedBox.setChecked(false);
}
lastChecked = (CheckBox)((ViewGroup)childView).findViewById(/* id of checkBox */);
lastChecked.setChecked(true);
}
));
private Map<String, Boolean> checkState;
public CustomAdapter(Context context) {
this.checkState = new ArrayList<Boolean>(group_list.length);
}
@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
final ViewHolder holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_check_box, null);
holder.checkbox = (Button)convertView.findViewById(R.id.checkbox);
if(checkState.containsKey(String.valueOf(position))) {
holder.checkbox.setBackgroundResource(R.drawable.fill_check_button);
holder.checkbox.setTag("0");
}else{
holder.checkbox.setBackgroundResource(R.drawable.unfill_check_button);
holder.checkbox.setTag("1");
}
holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.checkbox.getTag().toString().equals("0")) {
holder.checkbox.setTag("1");
holder.checkbox.setBackgroundResource(R.drawable.fill_check_button);
checkState.put(String.valueOf(position), true);
} else {
holder.checkbox.setTag("0");
holder.checkbox.setBackgroundResource(R.drawable.un_fill_check_button);
checkState.put(String.valueOf(position), false);
}
}
});
}