【Android】CustomListViewでクリックイベントが拾えない問題【解決】
Androidで普通のリストビューの時は
ListView lv = (ListView) findViewById(R.id.listView); lv.setOnItemClickListener(new AdapterView.OnItemClickListenner() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("DEBUG", "触ったよ"); } });
みたいな感じでクリック時の処理が効いていたのに、ちょっと工夫してカスタムしてみたら動かず、ログをみても
D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
と表示されるだけになってしまった。
いろいろググって試してみたけど、うまくいかないものが多かったけど、stackoverflow様が教えてくれた。
Usually this happens because the items in your listview are in focus. Try adding
というわけでViewのxmlファイルのリストビューのレイアウト部分に
android:descendantFocusability="blocksDescendants"
を追加したらちゃんとクリックもロングクリックも拾えるようになった。
どうやらListItemの子要素にButtonとかのクリックできるViewがあると、ListViewのクリックイベントをブロックするらしい。
なるほどなー(・ε・)