14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【ListView Tips Vo.1】ListViewの子要素(アイテム)のClickがおかしくなる 〜主な原因と対処法〜

Last updated at Posted at 2015-08-14

AndroidのViewの中でも頻出かつクセのある ListView関連のTips集Vol.1

症状例

  • ListViewの子要素(アイテム)のタッチが効かない
  • ListView自体のタッチが効かない

原因

■ イベントを取得したいアイテム以外にonClickListenerなどのイベントを取られている

Click系イベントに影響するものは、

  • Button関連
    • Button
    • ImageButton
    • CustomなButton
  • CheckBox
    • CheckBox
    • CustomなCheckBox
  • android:inputType=”textMultiLine”を含むTextView

などがある。
ListViewのアイテムに上記を入れている場合は注意。

■ 不用意にRootView(※)にandroid:clickable=trueをつけている

RootViewに上記を指定すると、内包するアイテムにも定義付けされ、イベントを取得したいもの以外に上記を定義することに繋がる。
ご利用は計画的に。

解決策

■ 一旦ListViewのアイテムのFocus属性を外す

ListViewのFocus属性を白紙に戻し、イベントを受け取りたいアイテムに属性を再定義して上書きする。

listview_item_sample_01.xml
android:descendantFocusability="blocksDescendants"

を入れることで、下位のViewのfocusを制限し、ListViewに制御を持たせることができる。

■ RootViewの指定を間違えない

前述した基本事項だが、RootViewはアイテムまで指定されるので注意が必要。
以下のように、

listview_sample.xml
android:clickable="true"

を間違えてRootViewで指定すると、各アイテム全てに指定したことになる。

■ イベント取得不要なアイテムからfocus属性を外す

イベント取得が不要なアイテムが少ない場合は、各アイテムに

listview_item_02.xml
android:focusable="false"
android:focusableInTouchMode="false"

を直接指定して、フォーカスを当てないようにすることも可能。

ListView Tips集

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?