重写一下Adapter,然后自己对Adapter每个Item布局,在布局里面设置一下点击效果就行了。如:
public class MainActivity extends Activity {
private Spinner mSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
initView();
}
private void initView(){
mSpinner = (Spinner)findViewById(Ridspinner);
MyAdapter adapter = new MyAdapter(getResources()getStringArray(Rarraygirl_names));
mSpinnersetAdapter(adapter);
}
private class MyAdapter extends BaseAdapter{
private String[] idInt ;
public MyAdapter(String[] idInt){
thisidInt = idInt;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return idIntlength;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return idInt[arg0];
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
if(arg1 == null){
arg1 = getLayoutInflater()inflate(Rlayoutspinner_item, null);
}
TextView text = (TextView)arg1findViewById(Ridspinner_item_id);
textsetText(idInt[arg0]);
return arg1;
}
}
spinner_itemxml
<xml version="10" encoding="utf-8">
<LinearLayout xmlns:android=">
在安卓客户端需要添加下拉框,供用户选择他们需要填写的选项。
如果使用资源文件把选项写死的话,只有text一种形式可选,局限太大,因此如果要实现 value - text 这种形式的话,需要单独写一个类 SpinnerOptionjava 。
1 布局文件
<Spinnerandroid:id="@+id/town_sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
2 下拉框选项实体 SpinnerOptionjava,在Spinner中显示选项的时候,默认会显示每个项(Object)的 toString() 之后的内容,因此重写 toString() 方法,让它输出 text 。
public class SpinnerOption {private String value = "";
private String text = "";
public SpinnerOption() {
value = "";
text = "";
}
public SpinnerOption(String value, String text) {
thisvalue = value;
thistext = text;
}
@Override
public String toString() {
return text;
}
public String getValue() {
return value;
}
public String getText() {
return text;
}
}
3 Fragment中:
ArrayList<SpinnerOption> towns;
//准备好下拉框内容
towns = new ArrayList<SpinnerOption>();
for (int i = 0; i < 18; i++) {
SpinnerOption c = new SpinnerOption(i + "", i + " 镇");
townsadd(c);
}
townSp = (Spinner)viewfindViewById(Ridtown_sp);
//设置Adapter
ArrayAdapter<SpinnerOption> townAdapter = new ArrayAdapter<SpinnerOption>(getActivity(),androidRlayoutsimple_spinner_item, towns);
townAdaptersetDropDownViewResource(androidRlayoutsimple_spinner_dropdown_item);
townSpsetAdapter(townAdapter);
//取下拉框的值
postDataput("townId", ((SpinnerOption)townSpgetSelectedItem())getValue());
在取值时要注意,getSelectedItem()得到的是笼统的Object对象而已,还需要把它转换类型为SpinnerOption类才能取值。
完成之后的效果:
联动可以用事件监听,当上级数据发生改变时,获取当前值,然后根据当前值得到下级数据集
pengx6107发表于
2013-6-6
09:39:10
我不知道你的应用是什么,我是这么做的,在本地用sqlite建了一个跟网上省市县相同的表,建一个同步程序,将网上的省市县数据下载到本地,这样你就可以在本地分别建立省的ArrayList、以省为参数的市ArrayList、以市为参数的县的ArrayList,这样在省spinner加载省的数据源,在省得spinner事件中加载市的数据源,同理,在市的spinner事件中加载县的数据,分别在省市县的spinner事件取得值,希望对你有帮助
Androidspinner实现省市二级联动,需要自定义adpter,将数据源绑定到adpter,当点击省时,触发自定义响应事件,改变市,示例如下:
public class MainActivity extends Activity {private TextView textView ;
private Spinner province;
private Spinner city;
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
//String[] provinces = new String[]{"-省份-","河北省","山西省","北京"};
textView = (TextView)thisfindViewById(RidtextView);
province = (Spinner)thisfindViewById(Ridprovince);
city = (Spinner)thisfindViewById(Ridcity);
//(处理省的显示)
//将可选内容与ArrayAdapter的连接(从资源数组文件中获取数据)
ArrayAdapter<CharSequence> adapter =
ArrayAdaptercreateFromResource(this, Rarrayprovince, androidRlayoutsimple_spinner_item);
//new ArrayAdapter<String>(this,androidRlayoutsimple_spinner_item, provinces);
//设置下拉列表的风格
adaptersetDropDownViewResource(androidRlayoutsimple_spinner_dropdown_item);
//将数据绑定到Spinner视图上
provincesetAdapter(adapter);
//添加条目被选中监听器
provincesetOnItemSelectedListener(new AdapterViewOnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<> parent, View view,int position, long id) {
//parent既是province对象
Spinner spinner = (Spinner)parent;
String pro = (String)spinnergetItemAtPosition(position);
//(处理省的市的显示)
//将默认值与ArrayAdapter连接(从资源数组文件中获取数据)
ArrayAdapter<CharSequence> cityAdapter = ArrayAdaptercreateFromResource
(MainActivitythis, Rarraycitydefault, androidRlayoutsimple_spinner_item);
//new ArrayAdapter<CharSequence>
// (MainActivitythis,androidRlayoutsimple_spinner_item, cities);
//获取所在省含有哪些市(从资源数组文件中获取数据)
if(proequals("河北省")){
cityAdapter = ArrayAdaptercreateFromResource
(MainActivitythis, Rarrayhb, androidRlayoutsimple_spinner_item);
}else if(proequals("北京市")){
cityAdapter = ArrayAdaptercreateFromResource
(MainActivitythis, Rarraybj, androidRlayoutsimple_spinner_item);
}else if(proequals("山西省")){
cityAdapter = ArrayAdaptercreateFromResource
(MainActivitythis, Rarrayshx, androidRlayoutsimple_spinner_item);
}
//绑定数据到Spinner(City)上
citysetAdapter(cityAdapter);
}
@Override
public void onNothingSelected(AdapterView<> parent) {
}
});
}
}
如果你想用spinner的话建议自己定义adapter那个封装好的arrayAdapter不灵活,太恶心了,如果你自定义adapter的话,我感觉就没啥难度了,直接List <Object>list = new ArrayList<Obejct>();那个object就是一个类似于bin的类,你可以通过setValue(),和 setId();把你的值set进去,然后你在选择spinner时就可以拿到下标一般为arg2,然后通过list拿出数据,在getId(),就ok了。
以上就是关于Android 怎么动态的设置Spinner联动全部的内容,包括:Android 怎么动态的设置Spinner联动、怎样将Spinner中的数据写入数据库、Android Java文件中获取下拉菜单的中用户选择的值 求大佬等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)