(Android)在List Item中设置Button并分别响应点击

本文探讨了在Android中使用CursorAdapter填充ListView时遇到的问题:List Item的Button点击与整个Item点击冲突,以及如何通过设置Tag解决Button点击改变错误数据行的问题。通过在ListView设置ItemClickListener和Button的OnClickListener,并利用final Tag保存初始Cursor位置,可以确保每个Button点击能正确响应对应的Cursor数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:用Cursor传入数据,CursorAdapter根据数据填充ListView,ListView的每个List Item都可以点击。并且List Item包含一个Button,该Button也要对点击动作做出响应。(List Item 和它包含的Button的点击反馈不同)

给一个 ListView 设置 OnItemClickListener 之后,如果再设置 Button并设置OnClickListener,那么Listview不会响应点击动作。解决这个问题的办法很简单,添加一行代码即可。

myButton.setFocusable(false);

但是还有一个问题。当我们使用Cursor来传入数据,并由Adapter填充内容时,Cursor指向的始终是最新一行数据的位置,这会导致点击所有Button改变的都是最新一行的数据。为了解决这个问题,使用Tag来保存初始化Button时Cursor指向的位置,然后在onClick方法中获取Tag,就可以使Cursor指向正确的对应位置。

注意由于Button会在inner class中使用,所以必须声明final。

final Button myButton = (Button)view.findViewById(R.id.my_button);
        myButton.setFocusable(false);
        myButton.setTag(cursor.getPosition());
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cursor.moveToPosition((int)myButton.getTag());
                ...///
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值