ListView
の各行にユニークなOnClickListener
を登録する方が便利ですが、これが許容される方法であることを確認したいと思います。私のcurrent designは、それぞれの行のタイプからOnClickListener
の懸念事項を分離するために複雑な方法です。onItemClickListenerの代わりに各ListView行に対してonClickListenerを実装することには欠点がありますか?
これは、ListView
に複数のクラスの行があるためです。各クラスは全く異なる責任と行動を持っています。たとえば、サブカテゴリと書籍タイトルの両方を含むことができるListView
と考えてください。書籍のタイトルをクリックすると、カバー画像を示す新しいアクティビティが開始されます。サブカテゴリをクリックすると、ブックとカテゴリの新しいリストが表示されます。
onItemClickListener
の実装者が管理する各行についての知識を漏らさずに、行自体が独自のIDと責任に関する知識を維持したいと考えています。
私は、これを行うことのパフォーマンス上の意味と、クリックを処理する方法を理解するための独自のロジックの実装とが何であるかも知りたいと思います。
onItemClickListener
の代わりにListView
ArrayAdapter
行ごとにonClickListener
を実装することには欠点がありますか?私は具体的なデータと特定の欠点ではなく、曖昧な推奨事項を探しています。
メモリ使用、初期化時間、またはが定常状態の速度(リストをスクロールするように)大きな影響を与えることを私は期待できますか?
@glenviewjeff - 返信する回答を更新しました。 –
+1と詳細な応答のためにTedさんに感謝します。 Android APIに、行ごとに1つのリスナに対して推奨することを正当化するデータや推奨事項がありますか、それとも何かの面白さに基づいていますか? –
タグベースのソリューションで注意すべき点は、すべての 'getView()'/'bindView()'コールで確実にタグを更新することです。従来の「ビューホルダー」パターンでは、行が膨らんだときにのみタグが設定されますが、「ホルダー」はUIに関連付けられたもの(例:行のウィジェット)を保持するためです。ここで説明するパターンでは、モデルデータに結びついている物にタグを保持する必要があるため、位置ごとにタグが変更されます。それでも、行ごとに個別のクリックリスナーを使用することをお勧めします。 – CommonsWare