3

データベーステーブルによって入力されたListActivityにListViewがあります。ListViewの各行は、rowid、date、nameの順に3つのTextViewを持つRelativeLayoutです。ListViewの.setSelection(int position)メソッドを使用して、プログラムで個々の行を選択できます。

私がやろうとしていることは次のとおりです。インターフェイスのボタンを押すと、現在選択されているリスト行からROWIDを取得し、ROWIDを使用してデータベースクエリを実行します。リスト自体からROWIDを取得する方法がわかりません。rowidは、データベース内のrowidであるため、リスト上のIDまたは位置と同じではない場合があります。

これにはアダプターを使用する必要があると思いますが、私は1週間Webを試したり検索したりしていて、これを理解することができませんでした。誰もが提供できる助けをありがとう。

4

2 に答える 2

3

現在選択されているアイテムのリスト位置を知っていて、そのアイテムに対して何らかのアクションをトリガーするボタンがListViewの外側にあり、ListView行(または各行内の子ビュー)をクリック可能にするだけではありません。右?

リストのアダプタから情報を取得できます。getItem(int position)は、位置にあるリストアイテムによって表されるオブジェクトを返すため、オブジェクトに格納されている場合は、必要な情報を直接取得できます。getView(int position)は行のビューを返し、findViewById(int id)を使用してTextViewを取得できるようにします。

アダプターをまだ持っていない場合は、getAdapter()を使用してListViewからアダプターを取得できます。

// ListView myListView = the ListView in question
// int selectedRow = the currently selected row in the ListView
// Each row in the ListView is backed by an object of type MyCustomDataClass

int dbRowId;
Adapter adapter = myListView.getAdapter();

MyCustomDataClass data = (MyCustomDataClass) adapter.getItem(selectedRow);
dbRowId = data.getDatabaseRowId();
// OR
dbRowId = data.rowId;
// OR whatever method the object has for getting the ID.

// OR
View listViewRow = adapter.getView(selectedRow);
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid);
String dbRowAsString = dbRowView.getText().toString();
dbRowId = Integer.parseInt(dbRowAsString);

また、ユーザーが行を選択して別のボタンを押すのではなく、ListView行をタップする方が自然であるかどうかを検討することもできます。リノの答えはもっとうまくいくかもしれません。

于 2011-02-24T06:07:06.137 に答える
1

私は次のコードで最後のメソッドを使用することになりました。

int dbRowId;
Adapter adapter = myListView.getAdapter();

View listViewRow = adapter.getView(selectedRow);
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null);
String dbRowAsString = dbRowView.getText().toString();
dbRowId = Integer.parseInt(dbRowAsString);

私がしなければならなかった唯一の変更は、.findViewByIDのパラメーターにnull、nullを追加することでした

TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null);
于 2011-02-24T23:38:17.000 に答える