带有删除/获取行ID复选框的Android ListView

带有删除/获取行ID复选框的Android ListView,android,listview,checkbox,Android,Listview,Checkbox,我试图实现一个带有复选框的listview,这样当选中复选框时,列表行将被删除。我正在用光标填充listview,这工作正常,并且正在显示复选框 我遇到的问题是如何获取已选中框的行的_id 有人能告诉我如何实现这样的东西吗 列表视图和复选框 Cursor cursor = db.getAllItems(); //String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID}; St

我试图实现一个带有复选框的listview,这样当选中复选框时,列表行将被删除。我正在用光标填充listview,这工作正常,并且正在显示复选框

我遇到的问题是如何获取已选中框的行的_id

有人能告诉我如何实现这样的东西吗

列表视图和复选框

        Cursor cursor = db.getAllItems();

    //String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID};
    String[] columns = new String[] {db.KEY_ITEM_NAME, db.KEY_MEASUREMENT, db.KEY_UNIT};

    int[] to = new int[] {R.id.ingredientName, R.id.ingredientMeasurement, R.id.ingredientUnit};

    final SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row4, cursor, columns, to, 0);

    final ListView shoppingList = (ListView) findViewById(R.id.shoppingList);
    shoppingList.setAdapter(myCursorAdapter);


    CheckBox deleteCheck = (CheckBox)findViewById(R.id.checkBox1);

    deleteCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (isChecked){
                // How do I get the list item clicked to delete row?
            }
        }

    });
XML-Row.4.XML

<?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="match_parent"
android:orientation="horizontal"
android:weightSum="1">

<TextView
    android:id="@+id/ingredientName"
    android:layout_width="wrap_content"
    android:textColor="#000000"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:hint="wewewe"/>

<TextView
    android:id="@+id/ingredientMeasurement"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/ingredientName"
    android:padding="5dp"
    android:hint="fefefef"/>

<TextView
    android:id="@+id/ingredientUnit"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/ingredientMeasurement"
    android:padding="5dp"
    android:hint="qqqqq"/>


<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:background="#fff"
    android:text=""/>
</LinearLayout>

使用此自定义光标适配器,并在此适配器中单击此处更改的句柄

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SimpleCursorAdapter;

public class CustomAdapter extends SimpleCursorAdapter implements CompoundButton.OnCheckedChangeListener {

    private Context mContext;
    private Context appContext;
    private int layout;
    private Cursor cr;
    private final LayoutInflater inflater;

    public CustomAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        this.layout = layout;
        this.mContext = context;
        this.inflater = LayoutInflater.from(context);
        this.cr = c;
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return inflater.inflate(layout, null);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);
        CheckBox checkBox1 = (CheckBox) view.findViewById(R.id.checkBox1);
        checkBox1.setOnCheckedChangeListener(this);
        int columnIndex = cursor.getColumnIndex(your column here);
        int columnvalue = cursor.getInt(columnIndex);
        checkBox1.setTag(columnvalue);

    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int id = (Integer) buttonView.getTag();
    }
}

您可以创建两种方法从listview中删除项,一种在适配器中,另一种在数据库中<代码>适配器.remove(item.getId(checkedId))并从数据库调用第二个方法
database.remove(item.getId(checkedId))
这就是从适配器和数据库中删除项的方式。感谢您的回答,只有一个问题,
getId
函数,它将获得行的
id
,还是数据库中实际的
\U id
getId
函数将获得您在listView中选择的对象的指定id。感谢您的回答,对于如何在列表活动中实现这一点,我有点困惑?您使用的是SimpleCorsOrAdapter,只需将其替换为此CustomAdapter,我希望它会起作用。还要为ingredientName设置值,选中复选框时,bindView方法和columnValue中的ingredientMeasurement和ingredientUnit将是您想要获取的id。我正在尝试在onCheckChange方法中执行一个简单的Toast,以查看id是否在更改,但无论按哪一行,它都保持不变,并且我无法删除特定的行,我是否遗漏了每行要更改的内容??checkBox1.setTag(columnvalue);检查这一行在bindView方法中设置了什么标记,它是相同的还是正在更改。