0

私のDBクラスには、カーソルを返すメソッドがあります。カーソルには、さまざまなテーブルのデータが含まれます。

public Cursor fetchFavTitles() {
    return myDataBase.rawQuery("SELECT rowid as _id, title, fav FROM table1 " +
                                "WHERE fav = 1 UNION ALL " +
            "SELECT rowid as _id, title, fav FROM table2 WHERE fav = 1 UNION ALL " +
            "SELECT rowid as _id, title, fav FROM table3 WHERE fav = 1 UNION ALL " +
            "SELECT rowid as _id, title, fav FROM table4 WHERE fav = 1 UNION ALL " +
            "SELECT rowid as _id, title, fav FROM table5 WHERE fav = 1 UNION ALL " +
            "SELECT rowid as _id, title, fav FROM table6 WHERE fav = 1", null);

}

次に、を使用して:SimpleCursorAdapter caにアタッチします。CursorListView lv

Cursor cursor = myDbHelper.fetchTitles(c);
String[] columns = {cursor.getColumnName(1)}; 
int[] columnsLayouts = {R.id.item_title};
ca = new SimpleCursorAdapter(this.getBaseContext(), R.layout.items_layout, cursor,columns , columnsLayouts);
lv = getListView();
lv.setAdapter(ca);

ここで、ListViewでアイテムを選択した場合、そのアイテムIDへの参照が必要です。 アイテムが属するテーブルから他の情報を取得するIDが必要です。そして、他のアクティビティMsgViewでそれを取得します

私はこれを試しました:

  • アイテムがクリックされたときに渡されるIDへの参照を持っている

  • その値をインテントで渡すと、他のアクティビティがこの渡された値を使用して必要なデータを取得します。

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            Intent i = new Intent(view.getContext(), MsgView.class);
                i.putExtra("id", (int) id); //
                startActivity(i);
        }
        });
    

しかし、これはうまくいきませんでした。私が使用しているIDはアイテムのIDではないようです!解決策やアイデアはありますか?

4

5 に答える 5

3

onItemClick メソッドでこれを試してください...

final SimpleCursorAdapter simpleCursorAdapter = (SimpleCursorAdapter) parent.getAdapter();
final Cursor cursor = simpleCursorAdapter .getCursor();

final int idColIndex = cursor.getColumnIndex(KEY_ROWID); //_id column of your table
final int rowId = cursor.getInt(idColIndex);

ここで私のプロジェクトの1つで使用されているのは、リンク参照行番号41です。これが役立つことを願っています。

編集:

解決しました。コメントを参照してください。

于 2011-07-11T13:25:48.947 に答える
2

IDではなく位置パラメーターが必要です

onItemClick のドキュメントを参照してください。

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id) 

導入されたバージョン: この AdapterView 内の項目がクリックされたときに呼び出される API レベル 1 コールバック メソッド。

実装者は、選択した項目に関連付けられたデータにアクセスする必要がある場合、getItemAtPosition(position) を呼び出すことができます。

パラメーター

親: クリックが発生した AdapterView。

ビュー: クリックされた AdapterView 内のビュー (これはアダプターによって提供されるビューになります)

position: アダプター内のビューの位置。

id: クリックされた項目の行 ID。

于 2011-07-11T13:21:32.793 に答える
0

私は自分の問題の解決策を見つけました。

それは専門的な解決策ではありませんが、私が今持っている唯一の解決策です。各テーブルに:という名前の新しい列を追加して、tableNumber各テーブルの番号が異なるようにしました。そうすれば、その数でアイテムを区別できます。

回答ありがとうございます。@gopalに感謝します

于 2011-07-12T07:54:28.860 に答える
0

ID を格納するために使用するクラスに静的データ メンバーを作成するMsgViewか、クラスに遅延メッセージを送信して、メッセージが到着する前にアクティビティが読み込まれて開始されるようにすることができます。

于 2011-07-11T13:21:47.297 に答える
0

View.setTag()およびView.getTag()メソッドを使用して、ビューにデータを保存できます。これを悪用して、Intent オブジェクトを ListView の各行に「タグ付け」することがあります。行のデータを検索する必要があるときはいつでも、 getTag() でインテントを取得するだけです

于 2011-07-11T13:24:54.163 に答える