9

ListView を拡張するアクティビティがあります。sqlite データベースへのクエリの結果をリストに入力します。リスト要素は、start_time、end_time、client_name、および status で構成されます。これらは、リスト項目ごとに表示する必要がある 4 ビットの情報です。

私の質問は: この ListView アイテムに非表示の要素を割り当てることは可能ですか?

たとえば、その ListView アイテムのデータベース行の _id フィールドを保存して、クリックすると、そのデータベース行のデータに基づいて新しいアクティビティを開始できるようにします。

編集

カーソルからリストを埋めるために使用するコード:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME};

// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display  };

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to);

R.layout.list_item は、リスト アイテムの XML です。私は PHP/HTML のバックグラウンドを持っているので、ここで通常行うことは、リスト項目がクリックされたときにアクセスできる _id 値を保持する隠しフィールドを作成することです。私はアンドロイドで似たようなことをすることができますか? 非表示の _id フィールドを xml レイアウトに配置できますか?

4

3 に答える 3

19

Web 開発の枠から少し離れてみてください。ビューの非表示フィールドに id などを保存する必要はありません。これにより、データとユーザー インターフェイスが混在し、多くの混乱と不要なビュー オブジェクトが作成されます。

sqlite データベースを使用して値を保存している場合は、CursorAdapterを使用してリスト項目を管理する必要があります。CursorAdapter は、データベースから取得した結果を格納し、データをユーザーに表示する方法を管理します。その後、 ListViewにonItemClickListenerを登録すると、リスナーはアダプターと、アダプター内でセルがクリックされたデータ項目の位置を受け取ります。これで、getItemを使用して、listitem の作成に使用されたデータベース結果を指すカーソルを取得できます。これで、データベースの結果からユーザーに表示されていない ID またはその他のすべての値を取得し、それをインテントに添付して次のアクティビティを開始できます。

于 2010-08-16T11:49:02.720 に答える
1

このすべての情報を収集する Java オブジェクトを作成することを検討する必要があります。たとえば、「ListItem」のようなクラスを作成すると、各項目に次の 5 つのプロパティ

あり
ます

次に、2 つのオプションがあります。オブジェクトをシリアル化してオブジェクト全体をデータベースに入れるか、既に持っている構造を維持して (おそらく)、データベースの各行がListItemオブジェクトになります。次に、データベースにクエリを実行するときに、それらすべてを ArrayList に入れ、ArrayAdapter を拡張して独自のアダプターを作成します。最後に、getView メソッドで、myListItem.getEnd_Timeデータを表示するために必要なすべてのメソッドを呼び出しgetIdます。オブジェクトが必要なときにアダプターから直接使用できる は使用しないでください。

于 2010-08-16T11:13:16.370 に答える
0

_id 以外の非表示の db 列が必要な場合は、ListView の onItemClick(...) で次のように呼び出します。

mAdapter.getCursor();

次に、選択したリスト項目/行の非表示列を取得できます。

Janusz が述べたように、_id のみが必要な場合は、次のように呼び出します。

mAdapter.getItemId();
于 2013-11-25T19:21:01.063 に答える