3

我正在尝试使用 SQLite DB 和Drag-Sort ListView创建一个简单的待办事项列表应用程序。

现在,我正在使用 SimpleCursorAdapter 将 SQLite 数据库游标中的数据绑定到 ListView 中,并使用 EditText 视图添加项目,如本教程中所述。

我已将所有内容移到一个活动中,并将普通 ListView 与 Drag-Sort ListView 交换。我的问题是将数据库和 Drag-Sort ListView 连接在一起。DLSV 演示使用预定义的数组来填充 DSLV。

片段形式 DSLV:

    DragSortListView lv = (DragSortListView) getListView(); 
    lv.setDropListener(onDrop);
    lv.setRemoveListener(onRemove);

    array = getResources().getStringArray(R.array.jazz_artist_names);
    list = new ArrayList<String>(Arrays.asList(array));

    adapter = new ArrayAdapter<String>(this, R.layout.list_item1, R.id.text1, list);
    setListAdapter(adapter);

我现有代码的片段:

    mDbHelper = new NotesDbAdapter(this);
    mDbHelper.open();
    ...
    mDbHelper.createNote(noteName, "");
    fillData();

    private void fillData() {
  // Get all of the notes from the database and create the item list
  Cursor c = mDbHelper.fetchAllNotes();
  startManagingCursor(c);

  String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
  int[] to = new int[] { R.id.text1 };

   // Now create an array adapter and set it to display using our row
   SimpleCursorAdapter notes =
     new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
     setListAdapter(notes);
   }

谢谢你,对不起,如果这没有多大意义。

4

3 回答 3

3

由于您无法重新排序 Cursor 中的项目,因此您必须在 Cursor 位置和 ListView 位置之间创建映射。这是由DragSortCursorAdapter类和子类为您完成的,以便直观地维护拖放重新排序。如果您需要持久化新订单(如数据库),那么您必须自己实现该逻辑。getCursorPositions()方法将帮助您解决此问题。

于 2013-01-04T08:38:43.913 回答
2

我已经使用了拖动排序列表视图。太奇妙了!但我没有使用 dragsortcursoradapter,而是创建了自己的技巧。这里是。

我所做的是,每当我交换任何项目时,我都会将数组中的新交换列表传递给数据库,删除表并重新创建新的更新表。这是我的代码 这是我的数据库处理程序中的代码片段

public void onUpdateToDoTable(ArrayList<Task> taskList) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKTODO);
    String CREATE_TASK_TODO_TABLE = "CREATE TABLE IF NOT EXISTS "
            + TABLE_TASKTODO + "(" + SEQ_ID + " INTEGER PRIMARY KEY,"
            + TASK_NAME + " TEXT )";
    db.execSQL(CREATE_TASK_TODO_TABLE);
    for (int i = 0; i < taskList.size(); i++) {
        ContentValues values = new ContentValues();
        values.put(TASK_NAME, taskList.get(i).getTask());
        db.insert(TABLE_TASKTODO, null, values);
    }
    db.close();
}

然后在使用 drop listener 时,我调用了上述方法..

private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
    @Override
    public void drop(int from, int to) {
        Task item = adapter.getItem(from);
        adapter.notifyDataSetChanged();
        adapter.remove(item);
        adapter.insert(item, to);
        db.onUpdateToDoTable(list);
        Log.d("LIST", db.getAllToDoTasks().toString());
    }
};

db 是我的数据库处理程序对象。整个源代码可在dragdroplistview 获得。惊人的例子。这对我来说是救命稻草。再见!

于 2014-07-18T11:22:37.990 回答
1

https://github.com/jmmcreynolds/dslv-db-demo上有一个 github 项目

此演示包含一个工作示例,说明如何设置 DragSortListView,它将您对列表所做的更改(位置、添加/删除)保存到数据库中。

我刚刚用过。它完美的演示项目可用于将 DSLV 与 SQLiteDB 一起使用。

感谢 github 用户 jmmcreynolds。

于 2014-11-26T14:06:03.747 回答