【bug记录】关于listview的setOnItemClickListener点击事件不生效。

自己的代码:

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和其子控件两者之间的关系。

 

该属性有三种值:

扫描二维码关注公众号,回复: 14132789 查看本文章

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!

猜你喜欢

转载自blog.csdn.net/niuguobao/article/details/124463708