1

リスト項目をクリックすると、アプリケーションが別のクラスをロードし、sqlite データベースからデータを取得して必要なデータをテキストビューに表示する必要があります

@Override
public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(DictionaryActivity.this,
            WordDetails.class);
    // Cursor cursor = (Cursor) adapter.getItem(position);
    id = wordList.getItemIdAtPosition(position);
    intent.putExtra("Word_ID", id);
    // cursor.getInt(cursor.getColumnIndex("_id"));
    startActivity(intent);
}

このコードは WordDetails クラスにあります

wordId = getIntent().getIntExtra("WORD_ID", -1);
if (wordId == -1) {
    mean = (TextView) findViewById(R.id.mean);
    mean.setText("Error");
} else {
    SQLiteDatabase db = (new DatabaseHelper(this))
            .getReadableDatabase();
    Cursor cursor = db.rawQuery(
            "SELECT _id ,word, mean FROM Meanings WHERE _id = ?",
            new String[] { "" + wordId });
    if (cursor.getCount() == 1) {
        cursor.moveToFirst();
        mean = (TextView) findViewById(R.id.mean);
        mean.setText(cursor.getString(cursor.getColumnIndex("mean")));
    }
}

アイテムをクリックすると、表示されるはずの「エラー」という単語が表示されますが、wordTd-1 に等しくなります。wordIdこれが正しい値を取得していないのはなぜですか? ご協力いただきありがとうございます。

4

2 に答える 2

2

エクストラを配置するときに使用される「キー」Intentは、大文字と小文字が区別されます。あなたはIDを次のように入れています...

intent.putExtra("Word_ID", id);

...しかし、それを取得しようとしています...

wordId = getIntent().getIntExtra("WORD_ID", -1);

言い換えれば、あなたは入れWord_IDて取得しようとしていますWORD_ID。コードを変更して、両方が同じで動作するようにします。

于 2012-07-02T19:54:49.553 に答える
1

デフォルトで OnItemClickListener に渡されるのidは、データベースからの行の一意の ID です。この方法で取得する必要はありません。

id = wordList.getItemIdAtPosition(position);

OnItemClickListener を次のように変更します。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(DictionaryActivity.this, WordDetails.class);
    intent.putExtra("Word_ID", id);
    startActivity(intent);
}
于 2012-07-02T19:47:09.820 に答える