約 10 個のリスト アイテムを含む ListView があります。各リスト項目にはチェックボックスがあります。一度にチェックボックスを1つだけオンにしたいと思います。
行 1 を選択すると、残りの 9 つのチェックボックスはすべてオフにする必要があります。
解決策を教えてください。
現在、リストがスクロールされているときにこれに苦労しています
約 10 個のリスト アイテムを含む ListView があります。各リスト項目にはチェックボックスがあります。一度にチェックボックスを1つだけオンにしたいと思います。
行 1 を選択すると、残りの 9 つのチェックボックスはすべてオフにする必要があります。
解決策を教えてください。
現在、リストがスクロールされているときにこれに苦労しています
あなたがすべきことは、最後にチェックされたアイテムを追跡することListView
です。このようなもの:onItemClickListener
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);
}
}
});
}