从列表视图中删除项目和从数据库android中删除数据

时间:2016-05-01 16:18:22

标签: android sqlite listview

我正在尝试从基于长按或点击的数据库和列表视图中删除数据。我看过一些教程,但不知道如何解决这个问题。有什么建议吗?

到目前为止我的代码是: listview适配器类:

public class AndroidListViewCursorAdaptorActivity extends Activity {

private DBAdapter dbHelper;
private SimpleCursorAdapter dataAdapter;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.workouts);

    dbHelper = new DBAdapter(this);
    dbHelper.open();



    //Generate ListView from SQLite Database
    displayListView();

}

private void displayListView() {


    Cursor cursor = dbHelper.getAllRecords();

    // The desired columns to be bound
    String[] columns = new String[] {
            DBAdapter.KEY_TITLE,
            DBAdapter.KEY_WORKOUTDATE,
            DBAdapter.KEY_EXERCISE_NOTES,

    };

    // the XML defined views which the data will be bound to
    int[] to = new int[] {
            R.id.title,
            R.id.workoutDate,
            R.id.workoutDetails,

    };

    // create the adapter using the cursor pointing to the desired data
    //as well as the layout information
    dataAdapter = new SimpleCursorAdapter(
            this, R.layout.workout_info,
            cursor,
            columns,
            to,
            0);

    ListView listView = (ListView) findViewById(R.id.listView1);
    // Assign adapter to ListView
    listView.setAdapter(dataAdapter);

    }


   lv.setOnItemLongClickListener(new OnItemLongClickListener() {

    public boolean onItemLongClick(AdapterView<?> parent, View view,
    int position, long arg3) {

        dbHelper.deleteRow();
    }
}

    }

并且继承了我的DBAdapter类:

public class DBAdapter {

public static final String KEY_ROWID = "_id";
public static final String KEY_TITLE = "title";
public static final String KEY_WORKOUTDATE = "workoutDate";
public static final String KEY_EXERCISE_NOTES = "notes";

private static final String TAG = "WorkoutDBAdapter";
private DatabaseHelper mDBHelper;
private SQLiteDatabase mdb;

private static final String DATABASE_NAME = "WorkoutDB";
private static final String DATABASE_TABLE = "workouts";
private static final int DATABASE_VERSION = 2;

private final Context mCtx;

private static final String DATABASE_CREATE =
        "create table if not exists workouts " +
                "(_id integer primary key autoincrement, " +
                "title VARCHAR not null, " +
                "workoutDate date, " +
                "notes VARCHAR );";

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.w(TAG, DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS workouts");
        onCreate(db);
    }
}


public DBAdapter(Context ctx) {
    this.mCtx = ctx;
}


public DBAdapter open() throws SQLException {
    mDBHelper = new DatabaseHelper(mCtx);
    mdb = mDBHelper.getWritableDatabase();
    return this;
}

public void close() {
    if (mDBHelper != null) {
        mDBHelper.close();
    }
}

//---insert a record into the database---
public long insertRecord(String title, String workoutdate, String notes) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_WORKOUTDATE, workoutdate);
    initialValues.put(KEY_EXERCISE_NOTES, notes);

    return mdb.insert(DATABASE_TABLE, null, initialValues);
}


//---retrieves all the records---
public Cursor getAllRecords() {
    Cursor mCursor = mdb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE,
            KEY_WORKOUTDATE, KEY_EXERCISE_NOTES}, null, null, null, null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

  public boolean deleteRow(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    return mdb.delete(DATABASE_TABLE, where, null) != 0;
}
}

1 个答案:

答案 0 :(得分:0)

我已经找到了我的问题,这里是工作代码
这是AndroidListViewCursorAdaptorActivity类

public class AndroidListViewCursorAdaptorActivity extends Activity {
private ListView lv;
private DBAdapter dbHelper;
private SimpleCursorAdapter dataAdapter;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.workouts);

    dbHelper = new DBAdapter(this);
    dbHelper.open();



    //Generate ListView from SQLite Database
    displayListView();

    ListView listView = (ListView) findViewById(R.id.listView1);
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                       int pos, long id) {
            Toast.makeText(getApplicationContext(),

                    "You have deleted a workout :)", Toast.LENGTH_LONG).show();

            Log.v("long clicked", "pos: " + pos);
            dbHelper.deleteRow(id);
            return true;

        }

    });
    displayListView();
}

private void displayListView() {


    Cursor cursor = dbHelper.getAllRecords();

    // The desired columns to be bound
    String[] columns = new String[] {
            DBAdapter.KEY_TITLE,
            DBAdapter.KEY_WORKOUTDATE,
            DBAdapter.KEY_EXERCISE_NOTES,

    };

    // the XML defined views which the data will be bound to
    int[] to = new int[] {
            R.id.title,
            R.id.workoutDate,
            R.id.workoutDetails,

    };

    // create the adapter using the cursor pointing to the desired data
    //as well as the layout information
    dataAdapter = new SimpleCursorAdapter(
            this, R.layout.workout_info,
            cursor,
            columns,
            to,
            0);

    ListView listView = (ListView) findViewById(R.id.listView1);
    // Assign adapter to ListView
    listView.setAdapter(dataAdapter);

    }

}

这是dbadapter类:

public class DBAdapter {

public static final String KEY_ROWID = "_id";
public static final String KEY_TITLE = "title";
public static final String KEY_WORKOUTDATE = "workoutDate";
public static final String KEY_EXERCISE_NOTES = "notes";

private static final String TAG = "WorkoutDBAdapter";
private DatabaseHelper mDBHelper;
private SQLiteDatabase mdb;

private static final String DATABASE_NAME = "WorkoutDB";
private static final String DATABASE_TABLE = "workouts";
private static final int DATABASE_VERSION = 2;

private final Context mCtx;

private static final String DATABASE_CREATE =
        "create table if not exists workouts " +
                "(_id integer primary key autoincrement, " +
                "title VARCHAR not null, " +
                "workoutDate date, " +
                "notes VARCHAR );";

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.w(TAG, DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS workouts");
        onCreate(db);
    }
}


public DBAdapter(Context ctx) {
    this.mCtx = ctx;
}


public DBAdapter open() throws SQLException {
    mDBHelper = new DatabaseHelper(mCtx);
    mdb = mDBHelper.getWritableDatabase();
    return this;
}

public void close() {
    if (mDBHelper != null) {
        mDBHelper.close();
    }
}

//---insert a record into the database---
public long insertRecord(String title, String workoutdate, String notes) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_WORKOUTDATE, workoutdate);
    initialValues.put(KEY_EXERCISE_NOTES, notes);

    return mdb.insert(DATABASE_TABLE, null, initialValues);
}


//---retrieves all the records---
public Cursor getAllRecords() {
    Cursor mCursor = mdb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE,
            KEY_WORKOUTDATE, KEY_EXERCISE_NOTES}, null, null, null, null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public boolean deleteRow(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    return mdb.delete(DATABASE_TABLE, where, null) != 0;
}
}