Androidアプリを作っていてListViewをクリック(タップ)しても反応しない問題が発生し、結構時間を費やしたので同じ被害者を増やさないために記録を残します。今回はその原因と解決策を示します。
ネットでよく見かける「Listviewがクリックできない問題」
こちらの問題は私がハマった方ではありません。
解決するためにネット検索をするとこちらの解決策がたくさん出てくるので一応触れます。
その問題とは、「ListViewの行要素に、チェックボックスやボタンがある場合にそちらにフォーカスを奪われ、リストビュー要素が反応しない」というものです。
上記の現象は、ListView内の行要素に「android:focusable=”false”」を設定することで解決するそうです。
自分がハマった「ListViewがクリックできない(反応しない)問題」
ここからが本題です。
私はある日、行をタップ(クリック)できる機能を実装したListViewを作成しました。
シンプルなListViewで各行の要素はTextView1つです(以下記事参考)。
setOnClickListenerをListViewに設定したものの、クリックしても反応しませんでした。
その日は謎のまま終え、後日ListViewをクリックすると反応しました。
「あれ?」と思いもう一度クリックしてもやはり反応なし。その後いろいろ検証しました。
結果、ListView内の行要素TextViewが端に寄っていて、そこをクリックすれば反応するようになっていることに気づきました。
ということで原因はListViewの幅の設定でした。
無意識に”wrap_content”にしてました。
<!-- TextViewの領域しかクリックできない設定 --> <ListView android:layout_width="wrap_content" /> <!-- 行全体でクリックに反応する設定 --> <ListView android:layout_width="match_parent" />
さいごに
何か複雑な問題かと色々調べましたが、結果的には単純な話でした。
ただListViewが占有する幅は、”wrap_content”と”match_parent”で差はなく、中の要素(TextView)にその設定が反映されるのは少し違和感。。。
コメント