下拉菜单(spinner)级联

本文介绍了如何在Android应用中实现级联的下拉菜单Spinner。通过创建多个Spinner并设置监听事件,根据上一级选择动态更新下级菜单内容。示例中详细展示了从校区到教学楼再到节次的选择流程,并提到了XML布局文件中如何定义和引用资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    级联顾名思义:就是说在第一个下拉菜单中选择某一项,相级联的第二个下拉菜单会有相应的项供选择,这种情况多出现在“选取省份,再选取市区”,因为选取某一个省份,就会有它相应的市区,下面我写的例子是我自己程序中用到的,是选取相应的校区,再选取相应的教学楼,仅供参考,学会如何使用spinner级联即可。
    特别注意的是下拉菜单内容可以写在数组中,也可以写在xml文件里,我的代码定义了spinner sp1,sp2,sp3。我把sp1,sp2内容就写在数组里,sp3代码写在xml中,因此xml部分我只贴了sp3相关的xml代码方便理解。

        private Spinner sp1;

         private Spinner sp2;

         private Spinner sp3;

         private ArrayAdapter<String> adapter1;

         private ArrayAdapter<String> adapter2;

        

         private int sp1_flag = 0;//记录选择的校区

         private int sp2_flag = 0;//记录选择的教学楼,初始为默认项

         private int sp3_flag = 0;//记录选择的节次

                  

         private Context context;

         private static final String[] queuilist = { "本部", "宏福" };

         private static final String[] default_linfo = { "教一", "教二", "教三", "教四","全部"};

         private static final String[][] queu_info = new String[][] {

                            { "教一", "教二", "教三", "教四","全部"}, { "教一", "教二", "全部"} };

                  

         @Override

         protected void onCreate(Bundle savedInstanceState)

         {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);//程序运行时,调用的起始(主)界面

                           

                   //下拉菜单

                   context = this;

                   sp1 = (Spinner) findViewById(R.id.spinner1);

                   // 将可选内容与ArrayAdapter连接起来

                   adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, queuilist);//初始为本部

                   // 设置下拉列表的风格

                   adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                   // adapter 添加到spinner

                   sp1.setAdapter(adapter1);

                   // 添加事件Spinner事件监听

                   sp1.setOnItemSelectedListener(new OnItemSelectedListener(){

                       public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

                                //int pos = sp1.getSelectedItemPosition();//获取被点击的是在第几行,也可直接用arg2

                                adapter2 = new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, queu_info[arg2]);

                                sp2.setAdapter(adapter2);

                                sp1_flag = arg2;//存储相应的第几项

                            }

 

                       public void onNothingSelected(AdapterView<?> arg0) {

                       }

                   });              

                   sp1.setVisibility(View.VISIBLE);// 设置默认值

 

                   sp2 = (Spinner) findViewById(R.id.spinner2);

                   adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, default_linfo);//初始为本部校区

                   adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                   sp2.setAdapter(adapter2);

                   sp2.setOnItemSelectedListener(new OnItemSelectedListener(){

                            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

                                     sp2_flag = arg2;

                            }

 

                            public void onNothingSelected(AdapterView<?> arg0) {

                            }

                   });

                   sp2.setVisibility(View.VISIBLE);

                                    

             sp3 = (Spinner) findViewById(R.id.spinner3);//得到Spinner对象

                  

             ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(

            this, R.array.three_arry, android.R.layout.simple_spinner_item);

                  

             adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

             sp3.setAdapter(adapter3);//绑定适配器

            

             sp3.setOnItemSelectedListener(new OnItemSelectedListener() {

                 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                           sp3_flag = position;

                 }

                       public void onNothingSelected(AdapterView<?> parent) {

                           //点击进行相应操作(未选中下拉菜单中选项时进行的操作,一般不会用到)

                       }

                   });              

         }

 

sp3的内容是存储在xml文件中:

1、在建立sp3那个java文件对应的xml文件中相应的代码:

<!-- 通过prompt属性设置展开后的Spinner的标题,要注意的是,一定要通过引用资源文件中的字符串来实现 -->

    <Spinner

        android:id="@+id/spinner3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/textView4"

        android:layout_centerHorizontal="true"

        android:prompt="@string/three_prompt" />

2、引用了资源文件,所以预先资源文件strings.xml中要写入:

    <string name="three_prompt">选择节次</string>

    <string-array name="three_arry">

    <item>1,2</item>

    <item>3,4</item>

    <item>5,6</item>

    <item>7,8</item>

    <item>9,10</item>

    <item>全部</item>

    </string-array>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值