我有一个listview,有大约200个项目,我已经为复选框实现了一个自定义ArrayAdapter.我使用SparseBooleanArray来存储框的值.
所有这一切都很好,但我似乎无法以图形方式更新框的检查.如果用户单击,则选中该框.但是,如果我在我的代码中调用setChecked,它对盒子本身没有影响(因此,即使它的值为true,也不会勾选它).
我已经通过尝试将所有框设置为真并且没有运气进行测试,即使它们都经过检查,但它们并未表明它们是正确的.不知道你需要看什么代码,但我已经在我的适配器中放了一个好的措施:
class CheckBoxArrayAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener {
private SparseBooleanArray checkedBoxes;
Context context;
public CheckBoxArrayAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
checkedBoxes = new SparseBooleanArray();
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final CheckBox view = (CheckBox) super.getView(position, convertView, parent);
//if(convertView == null) {
//convertView = view.inflate(context, R.layout.list_item, null);
//}
view.setTag(position);
view.setChecked(checkedBoxes.get(position, false));
System.out.println(view.getTag() + ": " + view.isChecked());
view.setOnCheckedChangeListener(this);
return view;
}
public boolean isChecked(int position) {
return checkedBoxes.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
checkedBoxes.put(position, isChecked);
notifyDataSetChanged();
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkedBoxes.put((Integer) buttonView.getTag(), buttonView.isChecked());
}
}
多谢你们!
最佳答案 好吧,似乎Checked Text View是最好的方法,使用它们作为列表项,并将其作为您的监听器:
public void onItemClick(AdapterView<?> parent, View view, int pos,long id)
{
if(!isChecked.get(pos)) {
messageList.setItemChecked(pos, true);
isChecked.put(pos, true);
}else{
messageList.setItemChecked(pos, false);
isChecked.put(pos, false);
}
//sendEmail("encima+Gmail4wrdr@gmail.com", address.get(pos) + ": " + subject.get(pos), Jsoup.parse(message.get(pos)).toString());
}
我之前使用的示例是由Google Android Dev提供的,这就是为什么我认为这是司空见惯的原因.但是,无论是否,这种方式都简单得多!