android Sipnner点击相同Item不响应OnItemSelected事件

本文探讨了Android Spinner中点击相同Item时OnItemSelected事件不响应的原因,并提供了自定义Spinner控件的解决方案,旨在确保每次点击都能触发事件。

原因:

1.下拉列表Sipnner点击相同Item不会响应(也就是spinner的OnItemSelectedListener只在第一次点击调用,其余重复点击不再响应)是因为Spinner的父类AbsSpinner的源代码为:

 voidsetSelectionInt(int position, boolean animate) {

       if (position != mOldSelectedPosition) {

           mBlockLayoutRequests = true;

           int delta  = position -mSelectedPosition;

           setNextSelectedPositionInt(position);

           layout(delta, animate);

           mBlockLayoutRequests = false;

       }

    }

解决办法:自定义一个Spinner控件,代码如下:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Spinner;

public class MySpinner extends Spinner {

	public MySpinner(Context context) {
		super(context);
	}

	public MySpinner(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MySpinner(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	@Override
	public void setSelection(int position, boolean animate) {
		boolean sameSelected = position == getSelectedItemPosition();
		super.setSelection(position, animate);
		if (sameSelected) {
			getOnItemSelectedListener().onItemSelected(this, getSelectedView(),
					position, getSelectedItemId());
		}
	}

	@Override
	public void setSelection(int position) {
		boolean sameSelected = position == getSelectedItemPosition();
		super.setSelection(position);
		if (sameSelected) {
			getOnItemSelectedListener().onItemSelected(this, getSelectedView(),
					position, getSelectedItemId());
		}
	}
}

在自己代码里面使用MySpinner控件就可以了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值