3

SQLite DB とDrag-Sort ListViewを使用して、単純な to do リスト アプリを作成しようとしています。

現在、SimpleCursorAdapter を使用して SQLite データベース カーソルから ListView にデータをバインドし、このチュートリアルで説明されているように EditText ビューで項目を追加しています。

すべてを 1 つのアクティビティに移動し、プレーンな ListView を Drag-Sort ListView と交換しました。私の問題は、DB と 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

ドラッグソートリストビューを利用しました。すごい!しかし、ドラッグソートカーソルアダプターを使用する代わりに、独自のトリックを作成しました。ここにあります。

私がやったことは、アイテムを交換するたびに、交換された新しいリストを配列でデータベースに渡し、テーブルを削除して、新しい更新されたテーブルを再作成することです。ここに私のコードがあります ここに私のデータベースハンドラーからのコードスニペットがあります

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

次に、ドロップリスナーを使用して、上記のメソッドを呼び出しました..

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 をセットアップする方法の実例が含まれています。

たった今使ってきました。SQLiteDB で DSLV を使用するための完璧なデモ プロジェクトを利用できます。

github ユーザー jmmcreynolds に感謝します。

于 2014-11-26T14:06:03.747 に答える