0

私は一種の大きなアプリケーションを作成していますが、それは主に 3 つのアクティビティとその中の ListView コンポーネントで構成されています。

MainActivity -> FirstActivity と戻る

MainActivity -> SecondActivity と戻る

3 つすべてに、特定のリスト ビュー アイテムを一覧表示する ListView コンポーネントがあります。

内部にマシンのすべてのプロパティを保持する MyMachine というシングルトン クラスがあり、それらの一部はメイン アクティビティの作成時に計算されます。

ここで達成したいこと は、マシンのすべての関連プロパティを Main、First、Second のアクティビティで一覧表示することです。同じものの特性を 3 つのグループに分類するようなものです。

私が直面した問題は次のとおりです。

各 ListView アイテムでクリック イベントが必要です。しかし、リスナーは ListView アイテムの整数キーを提供します。これは、マシンのすべてのプロパティを特定の整数キーにマップする必要があることを意味します。しかし、FirstActivity の項目 1 が Main アクティビティの項目 0 である場合、クリックすると間違った値が出力されます。

これを行うより良い方法はありますか?

基本的に、すべてのアクティビティで ListView アイテムがクリックされたときに、文字列値をマップし、ダイアログ ウィンドウに適切に表示する方法。この特定の目的のために関数を開発できますが、もっと簡単な方法はありますか:)

4

1 に答える 1

1

ListViewを使用してデータを表示しますAdapter(通常はBaseAdapterSimpleAdapterまたはのような実装の 1 つArrayAdapterが使用されます)。

Adapterクラスは、表示されるアイテムへの参照を保持しgetItemId(int position)、ListView 内の位置にあるアイテムの ID を返さなければならない特別なメソッドも持っています。

それでは、Item クラスがあるとしましょう:

public class Property{
  public final long id;
  public final String name;
  public final long price;

  public Property(long id, String name, long price){
    this.id = id;
    this.name = name;
    this.price = price;
  }
}

いくつかのデータベース レコードにマップ:

| _id | name | price |
|-----|------|-------|
|  1  | abcd |  123  |
|  2  | efgh |  456  |

次に、 を使用しArrayAdpaterて一連のPropertyアイテムを で表示できListViewます。

public class PropertyAdapter extends ArrayAdapter<Property>{

    public PropertyAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public long getItemId(int position) {
        return getItem(position).id;
    }

}

そして、アイテムのIDを取得できます:

  ListView listView = <some list view>;
  PropertyAdapter propertyAdapter = < adapter for list view >;

  listView.setAdapter(propertyAdapter);

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
           int itemId = propertyAdapter.getItemId(i);
           //-- this item Id is same as returned by getItemId(), 
           //-- which is id field of Property class
           //-- which is id column in database
        }
  });
于 2013-08-01T08:39:26.423 に答える