选中ListView复选框从数据库中删除

时间:2012-07-21 15:07:38

标签: android sqlite listview checkbox

我正在为ListView使用自定义列表适配器。如何从选中的复选框中获取数据库rowid / _id,以便我可以多次从数据库中删除数据?

这是我的活动:

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;
            }
        }
    };
}

我的活动布局:

<?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>

我的ListView布局:

<?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 个答案:

答案 0 :(得分:2)

1)使用checkbox.setTag属性将复选框与ID链接。

2)在删除按钮中,单击事件执行以下逻辑。

  • 遍历所有复选框
  • 使用checkbox.getTag属性收集检查对象的ID,并将其收集为逗号分隔。
  • 使用逗号分隔值进行删除操作。

希望您明白这一点,请检查link for conceptual实施。