Delete a row from SQLite database by taking id from the populated listview

2.4k Views Asked by At

Individual rows in the database are populated in a custom listview. the id of the row is also displayed in the listview. All I want is to delete a particular row by clicking on the corresponding list.

Here is the code I used to display the contents of the database:

class NoteAdapter extends CursorAdapter {

    public NoteAdapter(Cursor c) {
        super(Reccuring.this, c);

    }

    @Override
    public void bindView(View row, Context ctxt, Cursor c) {
        NoteHolder holder = (NoteHolder) row.getTag();
        holder.populateFrom(c, helper);

    }

    @Override
    public View newView(Context ctxt, Cursor c, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View row = inflater.inflate(R.layout.row1, parent, false);
        NoteHolder holder = new NoteHolder(row);
        row.setTag(holder);
        return row;
    }
}

static class NoteHolder {
    private TextView name = null;
    private TextView number = null;
    private TextView idtext = null;

    NoteHolder(View row) {
        name = (TextView) row.findViewById(R.id.noteText);
        number= (TextView) row.findViewById(R.id.noteText1);
        idtext = (TextView) row.findViewById(R.id.noteText3);

    }

    void populateFrom(Cursor c, NoteHelper helper) {
        name.setText(helper.getNote(c));
        number.setText(helper.getNote1(c));
        idtext.setText(helper.getNote2(c));

    }
}

And here's my database:

public class NoteHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "Test.db";
    private static final int SCHEMA_VERSION = 1;

    public NoteHelper(Context context) {
        super(context, DATABASE_NAME, null, SCHEMA_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE Notes (_id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT, num TEXT, sDate TEXT);");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

    public void insert(String note, String amt, String sDate) {
        ContentValues cv = new ContentValues();
        cv.put("note", note);
        cv.put("num", num);
        cv.put("sDate", sDate);
        getWritableDatabase().insert("Notes", "notes", cv);
    }

    public String getNote(Cursor c) {
        return (c.getString(1));

    }

    public String getNote1(Cursor c) {
        return (c.getString(2));

    }

    public String getNote2(Cursor c) {
        return (c.getString(0));

    }



    public Cursor getAll() {
        return (getReadableDatabase().rawQuery(
                "SELECT _id, note, num, sDate FROM Notes", null));

        }

    }
}

How can I select the rows in the listview and delete the corresponding rows in the database.

1

There are 1 best solutions below

1
On

First get the value at position which is clicked by method onItemClickListener() of list view:

@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) {
    LinearLayout linearLayout = (LinearLayout) view;// The main layout which contains your child views in which value is displayed

    TextView name = (TextView)linearLayout.getChildAt(0);// get child textview 1

    String nametext = name.getText().toString();// get String out of those textview

    deleteOldData(nametext)   
}

Then go to your database class and write this code:

public void deleteOldData(String nametext) {

            _sqliteDB.delete(tablename, " note = '" + nametext + "'", null);

    }

This way you can delete your table particular row.

If you are not able to do with this or may be notes column in database are same so use unique Id to set in text view of listview, extract it in this form and then pass that value to the database code and then delete it.