Android 复选框列表 - 选中取消选中不起作用 属性
Android checkbox list - check uncheck not working propery
我有带适配器的复选框列表。当用户单击列表中的所有复选框时会收到警报 "all cheked"。当用户单击行时一切正常,但如果他单击复选框,他会更改状态(复选标记)但不执行方法 - onItemClick。有时有些项目会触发方法,但我找不到关系。
当我单击复选框时,chekedValue 不会改变。在这种情况下,用户可以欺骗应用程序 :-)。
我的代码:
@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" />
问题是,当您单击 ListView 的行时,会调用 onItemClick 事件,但是当您单击复选框时,只会调用复选框事件,而不是 onItemclik,这就是为什么您没有执行所需操作的原因。
你可以做的是在你的适配器中有一个 CheckedChangeListener class 然后你写你的逻辑。
下面的参考检查 link 它包含当您单击它时更改复选框状态的代码。
http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html
我有带适配器的复选框列表。当用户单击列表中的所有复选框时会收到警报 "all cheked"。当用户单击行时一切正常,但如果他单击复选框,他会更改状态(复选标记)但不执行方法 - onItemClick。有时有些项目会触发方法,但我找不到关系。 当我单击复选框时,chekedValue 不会改变。在这种情况下,用户可以欺骗应用程序 :-)。 我的代码:
@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" />
问题是,当您单击 ListView 的行时,会调用 onItemClick 事件,但是当您单击复选框时,只会调用复选框事件,而不是 onItemclik,这就是为什么您没有执行所需操作的原因。
你可以做的是在你的适配器中有一个 CheckedChangeListener class 然后你写你的逻辑。
下面的参考检查 link 它包含当您单击它时更改复选框状态的代码。
http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html