0

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 Answer 1

2

1) Link you checkbox with ID using checkbox.setTag property.

2) In your delete button click event perform following logic.

  • Loop through all the checkboxes
  • collect the Id's of those who are checked using checkbox.getTag attribute and collect it as comma separated.
  • use the comma separated values for delete operations.

Hope you got the point and please check this link for conceptual implementations.

Sign up to request clarification or add additional context in comments.

6 Comments

I have try this method. When I checked, I will get the rowid and still it into a string. Multiple check will +="," to the string. But if I uncheck it, the id is still in the string. Is there anyway to delete the id from that string?
well read my answer again; You are trying to manage it on every click of CHECKBOX while I suggest you to collect ID's once you press delete button by looping through all the elements and select ID's of those who have selected is equals to checked... this way you will have all the ID's whose values are checked.
Can I have any example of the coding? I'm not quite sure how to do it
did you understand the concept first?
yes, but I don't know how to start the coding. I;m a beginner
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.