Android自定义组合控件:SherlockSpinner

如果你觉得从头开始自定义一个View比较麻烦,那么组合几个系统现有控件来实现需求的功能,会是你很好的一个选择。

一、前言

最近在项目中,需要使用Spinner来实现下拉选择功能,UI方面倒是要求不多。但是难点在于一个界面中有多个Spinner,并且有联动关系,数据需要在点击Spinner的时候请求服务器。而且当前Spinner数据依赖于前面选择的一个或多个结果,当获取到最新数据后,才显示下拉选项。

比如说我需要先选择一个仓库,再选择项目(依赖前面选择的仓库),再选择一个批次(依赖前面选择的仓库和项目),如果我在选择完仓库时,就去判断来预加载项目和批次的数据,会使依赖逻辑变得非常复杂。

这时候就想在每次点击一个Spinner的时候,去判断依赖的选项是否已经选择,未选择就提示需先选择;如果已选择,则进行网络请求,加载数据显示到下拉选项中。

(本例使用选择语言来进行演示。)

二、使用系统Spinner

1. 首先,我想到的便是使用系统的Spinner,说干就干,XML先上:

<Spinner    android:id="@+id/spn_languages"    android:layout_width="match_parent"    android:layout_height="36dp"/>

2. 然后代码设置Adapter匹配数据、设置OnItemSelectedListener绑定item选择的事件:

spnLanguages = (Spinner) findViewById(R.id.spn_languages);ArrayAdapter<String> mAdapterSystemSpinner =