0

Honeycomb でアプリをプログラミングしていますが、コンテンツ プロバイダーのカーソルに問題があります。公式のメモ帳の例からのこの単純なコードが達成する効果を達成したいと思います:

Cursor note = mDbHelper.fetchNote(mRowId);
            startManagingCursor(note);
            mTitleText.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));

つまり、ユーザーが編集できるように、Cursor の現在の位置から EditText にデータを配置したいだけです。問題は、CursorLoader でこれを行う方法がわからないことです。managedQuery() は非推奨であるため使用できません。いずれにしても、非推奨の startManagingCursor() を呼び出す必要があります。どうすればいいですか?前もって感謝します。

4

2 に答える 2

0

さて、私は答えを見つけました。これは今ではかなり明白です。私は単にこのコードを使用しました:

String[] projection = { FlightBundleDatabase.ID, FlightBundleDatabase.COL_TITLE };
            String[] selectionArgs = { Long.toString(id) };

        CursorLoader cursorLoader = new CursorLoader(this, FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);
        Cursor cursor = cursorLoader.loadInBackground();

        if (cursor.moveToFirst()) {
            mPhaseName.setText(cursor.getString(cursor.getColumnIndexOrThrow(FlightBundleDatabase.COL_TITLE)));
        }
        cursor.close();

今は、カーソルがリソースをリークしないことを願っていますが、close() がそれを処理する必要がありますよね?

于 2012-05-25T15:18:29.620 に答える
0

それ以外の:

CursorLoader loader = new CursorLoader(this, FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);
Cursor cursor = loader.loadInBackground();

カーソルを直接取得できます:

Cursor cursor = this.getContentResolver().query(FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);

this(コンテキストを参照すると仮定)。

[また、ID を使用したアイテムのフェッチは、通常、複数のアイテムを返す URI で選択を指定するのではなく、単一のアイテムを返す "content://authority/items/#" の形式の URI によって処理されます]

于 2012-12-10T12:10:21.007 に答える