I’m using a custom list adapter for my ListView. How can I get the database rowid/_id from the checked checkbox so that I can multiple delete the data from my database?
Here’s my activity:
import android.app.ListActivity;
import java.text.DecimalFormat;
import org.yhw.PlanWithMe.R;
import android.content.*;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.database.Cursor;
public class Finance_delete extends ListActivity {
Cursor cursor;
private TextView dateText;
private Button btnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.finance_delete);
registerForContextMenu(this.getListView());
DBAdapter dbHelper = new DBAdapter(this);
dbHelper.open();
// Get a Cursor for the list items
Intent intent = getIntent();
String date = intent.getStringExtra("date");
Cursor listCursor = dbHelper.getAllFinance(date);
startManagingCursor(listCursor);
// set the custom list adapter
setListAdapter(new MyListAdapter(this, listCursor));
dateText = (TextView) findViewById(R.id.lblDate);
dateText.setText("Delete Spending: " + date);
btnCancel = (Button) findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(click_listener);
}
private class MyListAdapter extends ResourceCursorAdapter {
public MyListAdapter(Context context, Cursor cursor) {
super(context, R.layout.list_item_with_description_delete, cursor);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
CheckBox cbListCheck = (CheckBox) view
.findViewById(R.id.list_checkbox);
cbListCheck.setChecked(false);
cbListCheck
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton cb,
boolean isChecked) {
if (cb.isChecked()) {
// action
} else if (isChecked == false) {
// action
}
}
});
TextView title = (TextView) view.findViewById(R.id.list_category);
title.setText(cursor.getString(cursor
.getColumnIndex(DBAdapter.KEY_Category)));
TextView details = (TextView) view.findViewById(R.id.list_desc);
StringBuffer detailsText = new StringBuffer();
String description = cursor.getString(cursor
.getColumnIndex(DBAdapter.KEY_Desc));
TextView spendings = (TextView) view
.findViewById(R.id.list_spending);
String spending = cursor.getString(cursor
.getColumnIndex(DBAdapter.KEY_Spending));
double tgtspend = Double.parseDouble(spending);
DecimalFormat dFormat = new DecimalFormat("0.00");
String formatSpend = dFormat.format(tgtspend);
spendings.setText("$" + formatSpend);
if (description != null && description.length() > 0) {
detailsText.append(description);
} else {
detailsText.append("-");
}
details.setText(detailsText.toString());
}
}
private OnClickListener click_listener = new OnClickListener() {
public void onClick(View view) {
// Intent intent = null;
switch (view.getId()) {
case R.id.btnCancel:
finish();
break;
}
}
};
}
My Activity layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/finance_top" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="45dp"
android:src="@drawable/navbar" />
<TextView
android:id="@+id/lblDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="57dp"
android:layout_alignParentLeft="true"
android:textColor="#ffffff"
android:textSize="16dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="240dp"
android:layout_marginTop="48dp"
android:src="@drawable/divider" />
<Button
android:id="@+id/btnTick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="45dp"
android:layout_marginTop="56dp"
android:background="@drawable/btn_tick" />
<Button
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="6dp"
android:layout_marginTop="56dp"
android:background="@drawable/btn_cancel" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="282dp"
android:layout_marginTop="48dp"
android:src="@drawable/divider" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="92dp"
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="106dp"
android:layout_marginTop="180dp"
android:text="@string/finance_note"
android:textColor="#ffffff"
android:textSize="18dp" />
</LinearLayout>
</RelativeLayout>
My ListView layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:duplicateParentState="true" >
<TextView
android:id="@+id/list_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/list_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/list_category"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/list_spending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="center"
android:paddingBottom="10dip"
android:paddingTop="10dip"
android:textAppearance="?android:attr/textAppearanceLarge" />
<CheckBox
android:id="@+id/list_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="" >
</CheckBox>
</RelativeLayout>
</LinearLayout>
1) Link you checkbox with ID using checkbox.setTag property.
2) In your delete button click event perform following logic.
Hope you got the point and please check this link for conceptual implementations.