Android ListView with Delete / Retrieve Row ID checkbox

I am trying to implement a listview with a checkbox, so that when the checkbox is checked, the list line will be deleted. I populate the list with the cursor and this works fine and a checkbox is displayed.

I'm having problems with how to get the _id rows of the field being checked.

Can someone 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> 
+5
source share
1 answer

Use this custom cursor adapter and onCheckedChanged handler 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(); } } 
+4
source

Source: https://habr.com/ru/post/1242117/


All Articles