我正在开发一个带有ListView
. 这里面的每个项目ListView
都会有一个checkbox
.
当用户单击其中一个时,我试图取消选中每个项目。例如 aListView
有两个项目,0, 1。
此时选择了 0 并且用户点击了第 1 项。我想取消选择第 0 项。
这是我的代码。它在一个ArrayAdapter
.
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(itemLayoutId, parent, false);
}
Gate gate = gates.get(position);
if (gate != null)
{
TextView itemText = (TextView)row.findViewById(R.id.gateNameText);
if (itemText != null)
itemText.setText(gate.getName());
ImageView imageView =
(ImageView)row.findViewById(R.id.gateTypeImage);
int resId;
switch (gate.getSelTypeOperation())
{
case 0:
resId = R.drawable.garage;
break;
case 1:
resId = R.drawable.pulse;
break;
case 2:
resId = R.drawable.onoff;
break;
default:
resId = R.drawable.garage;
break;
}
imageView.setImageResource(resId);
CheckBox checkBox =
(CheckBox)row.findViewById(R.id.gateSelectedCheck);
if (checkBox != null)
{
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
{
// Solo hago algo si el nuevo estado es marcado.
if (isChecked)
for(int i = 0; i < gates.size(); i++)
{
if (i != position)
{
Log.v("GatesAdapter", "uncheck: " + position);
View view = getView(i, null, null);
CheckBox checkBox =
(CheckBox)view.findViewById(R.id.gateSelectedCheck);
checkBox.setChecked(false);
}
}
}
});
checkBox.setChecked(selectedGateIndex == position);
}
}
return row;
}
但是,它不起作用。
我究竟做错了什么?