ListView列表项不能被点击

在布局中设置ListView控件,通过自定义适配器把数据跟控件绑定,结果ListView不能被点击

一、问题原因

我们自定义的布局item_list中包含一个Button控件,Button会将焦点获取到,导致item列表项获取不了焦点,默认焦点给了子控件,item列表项能选中的基础是能获取焦点。

二、解决方案

1、所以我们将item_list中所有包含的控件设置 android:focusable="false"不可获取焦点,这样listview就可以获取焦点,被选中了
2、我们可以在item_list的根布局上设置 android:descendantFocusability="blocksDescendants"这样就屏蔽了所有子控件获取焦点权限

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以按照以下步骤实现: 1. 在您的应用程序中创建一个广播接收器类,例如`MyBroadcastReceiver`。 2. 在`MyBroadcastReceiver`类中实现`onReceive()`方法,以处理接收到的广播消息。您可以在这个方法中获取被点击的`ListView`的位置或数据,然后执行您想要的操作,例如向其他组件发送数据或显示通知。 3. 在`ListView`的适配器类中,在`getView()`方法中为每个列表设置点击事件。当用户点击列表时,您可以使用`sendBroadcast()`方法向`MyBroadcastReceiver`发送广播消息,并将被点击的位置或数据作为附加信息一起发送。 下面是一些示例代码,供您参考: ```java // MyBroadcastReceiver.java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int position = intent.getIntExtra("position", -1); // 处理接收到的广播消息,例如发送数据或显示通知 } } // YourAdapter.java public class YourAdapter extends BaseAdapter { private Context mContext; public YourAdapter(Context context) { mContext = context; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // inflate view and bind data convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.ACTION_ITEM_CLICKED"); intent.putExtra("position", position); mContext.sendBroadcast(intent); } }); return convertView; } } ``` 在这个示例中,您需要使用`com.example.ACTION_ITEM_CLICKED`作为广播的action字符串。您还可以使用其他字符串,只要它们在发送广播和接收广播时匹配即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑伴你而行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值