自己的代码:
listView = binding.toollist;
adapter.setList(list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.i(TAG, "onItemClick: listview 点击事件生效");
}
}
);
下面的卡片就是用listview中添加cardview实现的:
原因:
如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,事件会被子View捕获到,ListView无法捕获处理该事件。
解决方法:
这两个问题都可以通过android:descendantFocusability属性做到。
该属性在view获得焦点时,定义ViewGroup和其子控件两者之间的关系。
该属性有三种值:
beforeDescendants:viewGroup会优先其子类控件而获得焦点
afterDescendants:viewGroup会当其子控件不需要获得焦点时才获取焦点
blockDescendants:viewGroup会覆盖子类控件而直接获得焦点
在cardview 中的跟布局中添加:android:descendantFocusability="blocksDescendants"
<LinearLayout
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="wrap_content">
问题解决,而且还不会覆盖。imagebutton的点击效果,nice!