Android——OnItemSelectedListener事件与二级联动

本文介绍了一个基于Android平台的省级联动Spinner实现案例。通过定义省份和地区数据,并利用Spinner控件及监听器实现地区联动效果,当选择省份时,相应城市列表会自动更新。

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

在res/value 中建立province.xml

代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="provarray">
        <item>河南省</item>
        <item>河北省</item>
        <item>山东省</item>
        <item>山西省</item>
    </string-array>
</resources>

布局文件

代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Spinner
        android:id="@+id/province"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/provarray" />

    <Spinner
        android:id="@+id/city"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
MainActivity.java 

代码

package com.example.whaletosea.application03;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;


public class MainActivity extends Activity {

    //声明Spinner对像
    private Spinner spinProvince=null;
    private Spinner spinCity=null;
    //定义城市数据,用于二级菜单
    private String[][] arrCity=new String[][]{
            {"郑州","开封","洛阳","安阳"},
            {"石家庄","保定","邯郸","张家口"},
            {"济南","青岛","烟台","日照"},
            {"太原","晋中","吕梁","临汾"}};
    //声明数组适配器,用来填充城市列表
    private ArrayAdapter<CharSequence> adapterCity=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取Spinner对象
        spinProvince=(Spinner)super.findViewById(R.id.province);
        spinCity=(Spinner)super.findViewById(R.id.city);
        //为spinProvince控件注册OnItemSelected监听器
        spinProvince.setOnItemSelectedListener(new ProvOnItemSelectedListener());
        //为spinCity控件注册OnItemSelected监听器
        spinCity.setOnItemSelectedListener(new CityOnItemSelectedListener());
    }

    //OnItemSelected监听器
    private class  ProvOnItemSelectedListener implements OnItemSelectedListener{
        //选择省份,触发城市下拉列表框
        @Override
        public void onItemSelected(AdapterView<?> adapter,View view,int position,long id) {
            //使用ArrayAdapter转换数据
            MainActivity.this.adapterCity=new ArrayAdapter<CharSequence>(
                    MainActivity.this,
                    android.R.layout.simple_spinner_item,
                    MainActivity.this.arrCity[position]);
            //使用adapterCity数据适配器填充spinCity
            MainActivity.this.spinCity.setAdapter(MainActivity.this.adapterCity);

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            //没有选择时执行
        }
    }
    //OnItemSelected监听器
    private class CityOnItemSelectedListener implements OnItemSelectedListener{
        //选择城市,触发显示选择的城市
        @Override
        public void onItemSelected(AdapterView<?> adapter,View view,int position,long id) {
            //获取选择的项的值
            String sInfo=adapter.getItemAtPosition(position).toString();
            Toast.makeText(getApplicationContext(), sInfo, Toast.LENGTH_LONG).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            //没有选择时执行
        }
    }
}

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值