0
私はAndroidが初めてです。チェックボックスを使用して複数の行を選択すると問題が発生します.1行目の最後の行がリストビュー全体を正しく選択すると削除されます。 ここに私のアクティビティコードseletect行フォームのlistviewを取得し、Sqliteデータベースから削除する方法
private void showDialog(final String warning, final String s) {
AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
adb.setTitle(warning);
adb.setMessage(s);
adb.setIcon(R.drawable.deleteicon);
String btn = "Ok";
if (warning.equals("Warning")) {
btn = "Yes";
adb.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
}
adb.setPositiveButton(btn, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (warning.equals("Warning")) {
int size = image_adapter.checkStatesArray.length;
for (int i = size - 1; i > 0; i--) {
if (image_adapter.checkStatesArray[i] == true) {
db.deleteImage(i);
}
image_adapter.notifyDataSetChanged();
}
// listView.clearChoices();
UpdateList();
/* sparseBooleanArray=listView.getCheckedItemPositions();
for (int i=0;i<sparseBooleanArray.size();i++){
if (sparseBooleanArray.valueAt(i)) {
int key = (int) image_adapter.getItemId(i);
db.deleteImage(key);
//db.deleteImage(key);
}*/
}
}
});
adb.show();
}
ここにアダプタクラスコードがあります。チェックボックスの状態をブール値の配列に割り当てます。
viewholder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id=(Integer)buttonView.getTag();
Toast.makeText(context, "clickd position"+id, Toast.LENGTH_SHORT).show();
images.get(id).setSelected(buttonView.isChecked());
if (buttonView.isChecked()){
checkStatesArray[id]=true;
}
else {
checkStatesArray[id] = false;
}
}
});
とデータベースの削除機能です。ここ
public void deleteImage(int id){
SQLiteDatabase db=this.getReadableDatabase();
Cursor c=this.getAll();
//database=this.getReadableDatabase();
//database.delete(TABLE_NAME,"id="+id,null);
c.moveToFirst();
for (int i=0;i<c.getCount();i++){
id=c.getInt(c.getColumnIndex("id"));
c.moveToNext();
}
db.delete(TABLE_NAME,"id="+id,null);
}