Spinner控件使用

在开发中我常常会需要一个下拉选择列表的使用,而这就是Spinner。为啥实现不同的显示效果,我们就需要为Spinner适配自定义的Adapter。


实体

public class ReceiveAddr {
    private String addr_desc;

    public String getAddr_desc() {
        return addr_desc;
    }

    public void setAddr_desc(String addr_desc) {
        this.addr_desc = addr_desc;
    }
}

XML:

<Spinner
            android:id="@+id/spinner_street"
            android:layout_width="match_parent"
            android:spinnerMode="dropdown"//显示方式为下拉框型式,也可设置dialog弹窗
            android:layout_height="match_parent"
            android:paddingLeft="20px"
            android:paddingRight="20px"
            android:popupBackground="#f0000000"
            android:background="@null"/>

Adapter:

public class SpinnerAdapter extends BaseAdapter {

	private final Context mContext;
	private List<ReceiveAddr> mList;
	private int mPosition;

	private class ViewHolder{
		public TextView mText;
	}

	public SpinnerAdapter(Context context) {
		mContext = context;
	}
	//传入列表数据
	public void update(List<ReceiveAddr> list){
		mList = list;
		notifyDataSetChanged();
	}
	//记录选中项,用于高亮显示判断
	public void setSelectPosition(int position) {
		mPosition = position;
		notifyDataSetChanged();
	}
	
	@Override
	public int getCount() {
		return mList== null ? 10 : mList.size();
	}

	@Override
	public ReceiveAddr getItem(int position) {
		return mList== null ? null : mList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
			
			holder = new ViewHolder();
			holder.mText = (TextView) convertView.findViewById(R.id.text);
			
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		ReceiveAddr info = getItem(position);
		if (info == null){
			holder.mText.setText("请选择");
		} else {
			holder.mText.setText(info.getAddr_desc());
		}
		holder.mText.setTextColor(mPosition == position ? Color.parseColor("#fe6c00") : mContext.getResources().getColor(R.color.text_black));
		return convertView;
	}
}
Activity;

	adapter = new SpinnerAdapter(this);
        adapter.update(list);
        mSpinner.setAdapter(adapter);
        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                adapter.setSelectPosition(position);
            }
            //没有选中时的处理
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
可以通过Spinner的 setSelection(int position) 或者setSelection(int position, boolean animate)来设置初始选中项 ,不设置则默认选中第一项。


这样坐下来我们会发现一个问题,那就是Spinner控件的显示和下拉框中显示的选择项会显示相同的效果,我们要怎么才能让Spinner正常显示,列表中显示选中效果呢。

很简单,我们在XML中将Spinner设置为  android:visibility="invisible",然后在在其上覆盖一个TextView用于显示选中结果就可以了。

因为Spinner为我们提供了一个    performClick()方法,通过该方法我们可以手动的调起Spinner的点击事件。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值