android setOnItemClickListener 不起作用

当Android列表项中包含Checkbox时,setOnItemClickListener可能无法正常工作。通过给父控件添加android:descendantFocusability=blocksDescendants和将Checkbox的android:focusable设为false,可以解决这个问题。此外,文章还提到了创建通用的Loading页面,实现微信录音交互功能,处理滑动与父控件的冲突,以及解决加载页面与下拉刷新控件的冲突问题。

android setOnItemClickListener 不起作用

当item中拥有Checkbox控件时候, setOnItemClick 不起作用

解决办法:

  1. 父控件添加属性: android:descendantFocusability="blocksDescendants"
  2. 子控件添加属性: android:focusable="false"
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="@dimen/widget_size_166"
    android:layout_marginLeft="@dimen/widget_size_8"
    android:layout_marginTop="@dimen/widget_size_8"
    android:layout_marginRight="@dimen/widget_size_8"
    android:background="@drawable/plan_shape"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical">
    
     <CheckBox
         android:id="@+id/switch_btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_centerVertical="true"
         android:layout_marginRight="@dimen/widget_size_10"
         android:button="@drawable/checkbox_alarm_selector"
         android:checked="false"
         android:focusable="false" />
</LinearLayout>

抽取一个通用的Android的Loading页面

完成仿微信录音的交互功能的开发

解决子控件滑动与父控件冲突的问题

决通用加载页面与下拉刷新控件冲突,导致下拉刷新动画执行不完整的问题

GONE 会导致布局重新执行layout函数,INVISIBLE 不会

Android 中为 `androidx.recyclerview.widget.RecyclerView` 设置 `setOnItemClickListener` 可以通过以下步骤实现: ### 方式一:在 Activity 中为适配器设置点击事件 在 Activity 中,先完成 `RecyclerView` 的基本设置,然后为适配器设置点击事件监听器。示例代码如下: ```java recyclerView = findViewById(R.id.id_rv); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, icon, title); recyclerView.setAdapter(adapter); // 这是新增的,用来设置点击事件 adapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this, "点击了第" + position + "个", Toast.LENGTH_SHORT).show(); } }); ``` 上述代码中,先对 `RecyclerView` 进行了布局管理器和适配器的设置,然后为适配器设置了点击事件监听器,当点击 `RecyclerView` 中的某一项时,会弹出一个包含点击项位置的 `Toast` 提示框 [^1]。 ### 方式二:在 Activity 中监听点击和长按事件 除了点击事件,还可以监听长按事件。示例代码如下: ```java mHomeAdapter.setOnItemClickListener(new HomeAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this, "点击了第" + (position + 1) + "条", Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, final int position) { new AlertDialog.Builder(MainActivity.this) .setTitle("确认删除吗?") .setNegativeButton("取消", null) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mHomeAdapter.removeData(position); } }).show(); } }); ``` 此代码在 `Activity` 中为适配器设置了点击和长按事件监听器。点击某一项时会弹出包含点击项位置的 `Toast` 提示框;长按某一项时,会弹出一个确认删除的对话框,点击“确定”会调用适配器的 `removeData` 方法删除该项 [^2]。 ### 原理说明 `onBindViewHolder` 中的 `setOnClickListener` 方法调用 `onClick` 方法来获取对应的 `position`,获取的 `position` 通过 `setOnItemClickListener` 公有方法让其在 `Activity` 中获取 `position` [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值