5

私は、異なる値を含む 2 つの TextViews を持つカスタム ListView を持っています。アイテムがクリックされたときに、これらの TextViews のいずれかからコンテンツを取得できるようにしたいのです。

これは私がこれまでに持っているコードです:

listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String value;
// value = (get value of TextView here)
     }
});

valueTextView の 1 つのテキストに割り当てることができるようにしたいと考えています。

4

3 に答える 3

10

@Sam の提案はほとんどのシナリオでうまく機能しますが、実際には、提供された in を使用することを好みAdapterViewますonItemClick(...)

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Person person = (Person) parent.getItemAtPosition(position);
    // ...
}

AdapterViewは、を使用して追加される可能性のあるすべてのヘッダー ビューを考慮に入れるため、これはもう少し確実なアプローチであると考えていますListView.addHeaderView(...)

たとえば、ListViewヘッダーが 1 つ含まれている場合、アダプターによって提供される最初の項目をタップすると、ヘッダーが位置を占めるため、(ヘッダーがない場合の既定のケースであるではなく)positionの値を持つ変数が生成されます。したがって、間違った位置のデータを誤って取得し、最後のリスト項目に を導入することは非常に簡単です。からアイテムを取得することで、位置は自動的に正しくオフセットされます。もちろん、手動で修正することもできますが、提供されているツールを使用してみませんか? :)100ArrayIndexOutOfBoundsExceptionAdapterView

参考までに。

于 2012-12-24T02:19:00.987 に答える
3

いくつかのオプションがあります。以前の質問のコードを参照します。

  • 行のレイアウトからこのデータにアクセスできますview

    ViewHolder holder = (ViewHolder) view.getTag();
    // Now use holder.name.getText().toString() and holder.description as you please
    
  • 次の方法でアダプタにアクセスできますposition

    Person person = mAdapter.getItem(position);
    // Now use person.name and person.description as you please
    

(ちなみに、Person クラスでは get メソッドは必要nameありdescriptionませpublicん。)

于 2012-12-24T00:21:01.930 に答える
0

次のメソッドをadaterclassでオーバーライドします。

public String[] getText() {
        return text;
    }
于 2013-05-18T07:34:28.050 に答える