1つまたは複数のアイテムを選択することに関連するListViewの内部機能をよりよく理解しようとしています.実際、ここまで理解するのがどれほど難しいかは驚くべきことです.
デフォルトでは、ListView アイテムを定期的にクリックすると、そのアイテムの「チェック済み」状態が true に設定されます。この動作をオーバーライドして、この選択が行われないようにするにはどうすればよいですか?
さらに基本的なことですが、ここで基になる ListView の仕組みは何ですか? 行ビューのデフォルトの onClick は、次に ListView の onItemClick/LongClick ハンドラを呼び出しますか、またはこのクリック処理はどのように順序付けされますか?
複数チョイスのchoiceModeを許可したいのですが、onItemLongClickで選択したいだけです。onItemClick をオーバーライドしてもこの動作は変わらず、アダプタの getView() 関数で行ビューの onClick ハンドラをオーバーライドすると、ListView の onItemClick と onItemLongClick が発生しなくなるようです。
以下は、私のアプリケーションのより詳細なコンテキストです
私の目標は、次のように機能する ListView を ListActivity に表示させることです。
- アイテムをクリックすると、非選択アクションが実行されます (行を展開して詳細情報を表示します)
- アイテムを長押しすると、そのアイテムが選択されます。項目を選択すると、行の背景が強調表示されます (Gmail アプリの場合と同様)。
- 複数の項目を選択できます
私のアプリケーション構造は次のとおりです。
- Activity は ListActivity の拡張です
- Adapter は ArrayAdapter<> の拡張です
- ListView 行レイアウトは完全にカスタム レイアウトです (組み込みの ListView 行レイアウトではありません)。
ListView の組み込み機能を理解することで、現在の状況にたどり着きました。
- choiceMode を multipleChoice に設定する
- ListView の「チェック済み」機能を使用して選択を行い、追跡する
- カスタムセレクターを「activatedBackgroundIndicator」として使用して強調表示を表示します(例はこちら)