Android关于Spinner只能使用onItemSelectedListener事件源码分析

/**
 * <p>A spinner does not support item click events. Calling this method
 * will raise an exception.</p>
 * <p>Instead use {@link AdapterView#setOnItemSelectedListener}.
 *
 * @param l this listener will be ignored
 */
@Override
public void setOnItemClickListener(OnItemClickListener l) {
throw new RuntimeException("setOnItemClickListener cannot be used with a spinner.");
}

Spinner源码中setOnItemClickListener说到,切换使用setOnItemSelectedListener。

原因:

Spinner的父类AbsSpinner源码中并没有实现任何其父类AdapterView的任何类似点击事件,所以所有事件都交给Spinner去实现,这里禁用了setOnItemClickListener事件,点击事件还剩下

setOnClickListener(View.OnClickListener l)

setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener)

setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)

这些事件可用,其中长点击事件不用。查看AdapterView的setOnClickListener事件源码

@Override
public void setOnClickListener(OnClickListener l) {
throw new RuntimeException("Don't call setOnClickListener for an AdapterView. "
                           + "You probably want setOnItemClickListener instead");
}

可以看到该方法也被禁用了,提示我们切换setOnItemClickListener,但setOnItemClickListener方法在Spinner被实现并禁用了,那么只剩下onItemSelectedListener没被Spinner实现并且在AdapterView中可用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值