【问题标题】:Delete a row from SQLite database by taking id from the populated listview通过从填充的列表视图中获取 id 从 SQLite 数据库中删除一行
【发布时间】:2012-01-28 08:52:55
【问题描述】:

数据库中的各个行填充在自定义列表视图中。行的 id 也显示在列表视图中。我只想通过单击相应的列表来删除特定的行。

这是我用来显示数据库内容的代码:

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

    }
}

这是我的数据库:

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

        }

    }
}

如何选择列表视图中的行并删除数据库中的相应行。

【问题讨论】:

    标签: android sqlite delete-row corresponding-records


    【解决方案1】:

    首先获取列表视图的方法onItemClickListener()点击的位置的值:

    @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)   
    }
    

    然后去你的数据库类,写下这段代码:

    public void deleteOldData(String nametext) {
    
                _sqliteDB.delete(tablename, " note = '" + nametext + "'", null);
    
        }
    

    这样您就可以删除表格中的特定行。

    如果您无法做到这一点,或者数据库中的注释列相同,请使用唯一 ID 在列表视图的文本视图中设置,以这种形式提取它,然后将该值传递给数据库代码,然后删除它。

    【讨论】:

    • 欢迎您,我的朋友有任何疑问,请评论我好
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2017-04-30
    • 2019-06-01
    相关资源
    最近更新 更多