Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ListView With Check Box Deleting/Getting Row ID

I am trying to implement a listview with checkbox so that when a check box is checked the list row will be removed. I am populating the listview with a cursor and this is working fine and the checkbox is being displayed.

What I am having trouble with is figure out how to get the _id of the row of the box that has been checked.

Can anyone show me how to implement something like this

ListView and 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>
like image 861
JJSmith Avatar asked Sep 26 '22 12:09

JJSmith


1 Answers

Use this custom cursor adapter and handle onCheckedChanged here in this adapter.

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();
    }
}
like image 174
Hunain Avatar answered Sep 28 '22 06:09

Hunain