Android Snackbar中事件监听器回调时的实参

一、问题引出

我们都知道Snackbar的基本使用方法是获得Snackbar的实例后调用setAcion()设置一个可交互的按钮,当单击时会回调第二个参数设置的监听器方法,但回调这个方法时,传给方法参数的实参到底是什么呢,它好像并不像普通的按钮那样简单。

二、试验

在onClick()方法中使用view.getId()方法获得它的id,并打印出来。

打印布局件中的每一个组件(包括根布局组件)的id。

比较一下,结果是这个view的id不与布局文件中任何一个id相同,也就是说传给它的实参并不是布局文件中的组件。

那猜想一下,我们单击时,单击的是一个按钮,并且会显示的“确定删除数据”这条消息,那会不会是这两个组件其中的一个。

三、结果

  • 查看一下setAction()方法的源码
  • 虽然看不太懂,但可以发现这里有一个TextView的组件,那有可能传进去的就是这个。
  • 这个TextView的对象,是先用类中的view实例调用getChildAt()方法获得一个SnackbarContentLayout的实例,再用这个实例调用getActionView()获得的。
  • 我们编写一个方法使用同样的手段获得一个Snackbar实例中创建的这个TextView的实例的id。
  • 接下来用这个方法获得那个TextView的id并打印出来比较。
  • 可以看到这两个id是相同的,所以回调监听器方法时传入的实参就是这个TextView。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值