くわこのpermission denied.

WEBエンジニアの僕がぶつかった技術的な問題や発見

【Android】CustomListViewでクリックイベントが拾えない問題【解決】

f:id:mask0702:20151209100945j:plain

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様が教えてくれた。

stackoverflow.com

Usually this happens because the items in your listview are in focus. Try adding

というわけでViewのxmlファイルのリストビューのレイアウト部分に

android:descendantFocusability="blocksDescendants"

を追加したらちゃんとクリックもロングクリックも拾えるようになった。
どうやらListItemの子要素にButtonとかのクリックできるViewがあると、ListViewのクリックイベントをブロックするらしい。

なるほどなー(・ε・)

aftercider.hatenablog.com