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

标签 android listview checkbox

我正在尝试实现一个带有复选框的 ListView ,以便在选中复选框时删除列表行。我正在用光标填充 ListView ,这工作正常并且正在显示复选框。

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

谁能告诉我如何实现这样的东西

ListView 和 CheckBox

        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>

最佳答案

使用此自定义游标适配器并在此适配器中处理 onCheckedChanged。

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

关于带有复选框删除/获取行 ID 的 Android ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35159881/

相关文章:

android - 纵向使用相机

javascript - 如何确保在允许提交我的表单之前勾选我的确认复选框

c# - WindowsPhone : IsSelected property doesn't change in collection

android - 如何使用android studio显示特殊字符

android - 无法使用Android手机调试连接到本地主机

java - 找不到 fragment PlaceholderFragment 的 id View

android - 列表显示黑色

qt - 如何给垂直滚动条和滚动区域添加鼠标滚轮滚动?

java - 添加新记录时 ListView 不刷新

php - 获取从数据库 codeigniter 中检查的复选框值