【Android】ListViewとListView内のButtonのOnClickListenerが競合する

【Android】ListViewとListView内のButtonのOnClickListenerが競合する

こんにちはhaneoです。

かっこいいUIほどAndroid標準のコンポーネントでは表現しにくく
そうなるといろいろカスタムマイズしたくなってきますよね。

先日カスタムListViewを作成していると、

『子ビューにボタンを置いて、ボタンを押したときはセレクト状態(お気に入り)
にして、リストのボタン以外の部分を押したときはリストアイテムの詳細ページへ遷移する』

としたかったのですが、普通に置いていくと実際の挙動では
Buttonを押したはずが、ListViewのOnitemClickListenerにイベントを取られ
詳細ページへ遷移してしまいます。

押す部分によって反応を分けるにはどうすれば良いのだろうと調べていると、
ViewGroupのプロパティにdescendantFocusabilityというのがあって、
これを”blockDescendants”にしておくと、
ButtonのOnClickListenerとListのOnItemClickListenerが
分かれていい感じの反応をしてくれます。

以下、ソース…

分かりにくいかも知れませんがボタンを押下すると、
ボタン部分がON状態に変わり、

custom_listview_button_on
アイテム部分を押すと、全体が反転しています。

カスタムリストビューアイテム押下時


この記事はあなたの役に立ちましたか?他の人達にも役立ちそうでしたら、上のボタンより共有をお願いします。共有して頂けたら今後提供する記事の参考やモチベーションアップにつながります。

Categorized: Android