Android 怎么动态的设置Spinner联动

Android 怎么动态的设置Spinner联动,第1张

重写一下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 布局文件

<Spinner   

           android: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文件中获取下拉菜单的中用户选择的值 求大佬等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9789127.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存