我有适配器的复选框列表。当用户点击列表上的所有复选框时,获得警报"所有cheked"。当用户点击行时,一切正常,但如果他点击复选框,他就会改变状态(复选标记)但不执行方法 - onItemClick。有时一些项目会触发方法,但我无法找到关系。 当我点击复选框chekedValue dosn没有改变。在这种情况下,用户可以欺骗应用程序:-)。 我的代码:
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position,long arg3) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);
TextView tv = (TextView) v.findViewById(R.id.textView1);
cb.performClick();
if (cb.isChecked()) {
Log.v("Cheked clik OK ","");
checkedValue.add(tv.getText().toString());
// tv.setBackgroundResource(R.drawable.linia_przekreslenie);
checkAllMarks();
} else if (!cb.isChecked()) {
Log.v("Cheked clik uncheck ","");
checkedValue.remove(tv.getText().toString());
// tv.setBackgroundColor(Color.argb(0, 0, 0, 0));
}
}
private void checkAllMarks() {
int sizeCheckedValue = checkedValue.size();
int sizePackageList1 = packageList1.size();
Log.v("chekedvalue " + Integer.toString(sizeCheckedValue), "Package " + sizePackageList1);
Log.v("chekedValue1 " +checkedValue, " ");
if (sizeCheckedValue == sizePackageList1) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.ready_to_go);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alert.show();
}
}
.....My list_item.xml
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignParentRight="true"
android:layout_marginRight="16dp"
android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false" />
答案 0 :(得分:0)
问题是,当你点击ListView的行时,会调用onItemClick事件,但是当你点击复选框时,只调用复选框事件而不是onItemclik,这就是为什么你想要的操作不执行的原因。
你可以做的是在你的适配器类中有一个 CheckedChangeListener ,并在那里写下你的逻辑。
对于参考检查链接,它包含的代码会在您单击时更改复选框的状态。
http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html