我在这里遇到了一个棘手的问题:
在我的应用程序中,有一个列表(使用ListView),每个项目包含文本和右侧对齐的复选框。
现在,单击复选框本身,我为它安装了一个处理程序(OnClickListener
)并执行内部操作。复选框的可见状态与预期一样 - 第一次勾选时单击,再次单击勾号消失。
现在我只是想将可点击区域“扩展”到完整列表条目 - 我的方法是使用OnItemClickListener
安装ListView.setOnItemClickListener()
并在此监听器中执行以下操作:
resultView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
checkBox.performClick();
}
});
这听起来很简单,但是有时(不是每次)复选框中的勾号都不会出现在那之后!我添加了checkBox.invalidate()
,但没有帮助。
如何点击完整列表条目项的“响应”复选框??? 谢谢!
答案 0 :(得分:3)
而不是使用performClick()
代替使用checkBox.setChecked( !checkBox.getChecked() );
。 performClick()
将导致再次调用onClickListener
,从而可能导致递归,这可以解释您所看到的奇怪行为。
答案 1 :(得分:0)
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v.findViewById(R.id.chkSelected);
TextView tv = (TextView) v.findViewById(R.id.tvName);
// pi = (PackageInfo) arg0.getItemAtPosition(position);
cb.performClick();
if (cb.isChecked()) {
checkedValue.add(tv.getText().toString());
} else if (!cb.isChecked()) {
checkedValue.remove(tv.getText().toString());
}
}