Android实现联动下拉框

Android实现联动下拉框,二级地市联动下拉框

日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手。

思路/步骤:

在实现联动下拉框之前,我们先对用到的ArrayAdapter和数据的封装作必要的了解,Android 中提供了很多适配器的实现类,其中ArrayAdapter就其中之一。它可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。如:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
   getApplicationContext(), 
    R.array.province,
     android.R.layout.simple_spinner_item);

ArrayAdapter中比较常用的泛型是String,但此处用了CharSequence(字符序列),通过指定泛型来装配适合的数据类型。
这段代码中有三个参数:

  1. 第一个参数Context是上下文,就是当前的Activity。
  2. 第二个参数是数据来源,R.array.province是存储在xml文件中的数据。
  3. 第三个参数是Android SDK中内置的一个TextView。(此xml文件中只有一个TextView)。
  • 通过创建一个ArrayAdapter处理存储在xml中的省份地市数据,用Spinner控件处理ArrayAdapter处理好的数据,用TextView将数据显示出来形成一个list供用户点击选择。
主要实现代码: MainActivity.java
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {
	Spinner spinner1, spinner2;//声明两个下拉框
	String City, Province;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		spinner1 = (Spinner) findViewById(R.id.spinner1);//绑定ID
		spinner2 = (Spinner) findViewById(R.id.spinner2);//绑定ID
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.province,
				android.R.layout.simple_spinner_item);//创建资源
		spinner1.setAdapter(adapter);//装配数据
		spinner1.setOnItemSelectedListener(new provinceClickListen());//监听事件
		spinner2.setOnItemSelectedListener(new CityClickListen());//监听事件
	}
class provinceClickListen implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View v, int i, long l) {
			Spinner spinner = (Spinner) parent;
			String pro = (String) spinner.getItemAtPosition(i);//获取当前选中项
			ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.def,
					R.layout.item);//初始化
			Province = spinner1.getSelectedItem().toString();//当前选中的省份
			/** 根据省份,装配地市数据**/
			if (pro.equals("北京")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.北京, R.layout.item);
			} else if (pro.equals("天津")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.天津, R.layout.item);
			} else if (pro.equals("河北")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.河北, R.layout.item);
			} else if (pro.equals("山西")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.山西, R.layout.item);
			} else if (pro.equals("内蒙古")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.内蒙古, R.layout.item);
			} else if (pro.equals("辽宁")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.辽宁, R.layout.item);
			} else if (pro.equals("吉林")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.吉林, R.layout.item);
			} else if (pro.equals("黑龙江")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.黑龙江, R.layout.item);
			} else if (pro.equals("上海")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.上海, R.layout.item);
			} else if (pro.equals("江苏")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.江苏, R.layout.item);
			} else if (pro.equals("浙江")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.浙江, R.layout.item);
			} else if (pro.equals("安徽")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.安徽, R.layout.item);
			} else if (pro.equals("福建")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.福建, R.layout.item);
			} else if (pro.equals("江西")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.江西, R.layout.item);
			} else if (pro.equals("山东")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.山东, R.layout.item);
			} else if (pro.equals("河南")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.河南, R.layout.item);
			} else if (pro.equals("湖北")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.湖北, R.layout.item);
			} else if (pro.equals("湖南")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.湖南, R.layout.item);
			} else if (pro.equals("广东")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.广东, R.layout.item);
			} else if (pro.equals("广西")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.广西, R.layout.item);
			} else if (pro.equals("海南")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.海南, R.layout.item);
			} else if (pro.equals("重庆")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.重庆, R.layout.item);
			} else if (pro.equals("四川")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.四川, R.layout.item);
			} else if (pro.equals("贵州")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.贵州, R.layout.item);
			} else if (pro.equals("云南")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.云南, R.layout.item);
			} else if (pro.equals("西藏")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.西藏, R.layout.item);
			} else if (pro.equals("陕西")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.陕西, R.layout.item);
			} else if (pro.equals("甘肃")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.甘肃, R.layout.item);
			} else if (pro.equals("青海")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.青海, R.layout.item);
			} else if (pro.equals("宁夏")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.宁夏, R.layout.item);
			} else if (pro.equals("新疆")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.新疆, R.layout.item);
			} else if (pro.equals("台湾")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.台湾, R.layout.item);
			} else if (pro.equals("香港")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.香港, R.layout.item);
			} else if (pro.equals("澳门")) {
				adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.澳门, R.layout.item);
			}
			spinner2.setAdapter(adapter);//装配地市数据
		}
		public void onNothingSelected(AdapterView<?> parent) {

		}
	}
	class CityClickListen implements OnItemSelectedListener {

		public void onItemSelected(AdapterView<?> parent, View v, int i, long l) {
			City = spinner2.getSelectedItem().toString();//当前选中的地市
			if (City.equals("-城市-")) {//当前还没选择地市
			} else {
				Toast.makeText(getApplicationContext(), Province+"省"+City, Toast.LENGTH_LONG).show();//Toast显示选中的省份城市
			}
		}
		public void onNothingSelected(AdapterView<?> parent) {}
	}
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}
此外还有布局文件: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/province"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="省份:" />
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/city"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="城市:" />
    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />
</LinearLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
    <TextView  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/spinner_item"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="名称"
        android:textColor="#000"
        android:textSize="16dp"/>

实现效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成选择后
本文章参看作者:预言家,做学习交流所用,如有侵权,请及时反馈,感谢!

Android实现下拉框多级联动,可以通过以下步骤来完成: 1. 创建一个布局文件,用于显示下拉框和多级联动的控件。 2. 在 Activity 中创建一个 ArrayList 对象,用于存储下拉框中的数据。 3. 在 Activity 中创建一个 ArrayAdapter 对象,用于将数据绑定到下拉框中。 4. 使用 Spinner 控件来显示下拉框,并设置 OnItemSelectedListener 监听器。 5. 在 OnItemSelectedListener 监听器中获取用户选择的数据,并更新下一级下拉框的数据。 6. 重复步骤 3-5,直到所有下拉框都被填充为止。 下面是一个简单的示例代码: ``` // 定义省市区的数据 private ArrayList<String> provinceList; private ArrayList<String> cityList; private ArrayList<String> areaList; // 定义下拉框控件 private Spinner spProvince; private Spinner spCity; private Spinner spArea; // 定义适配器对象 private ArrayAdapter<String> provinceAdapter; private ArrayAdapter<String> cityAdapter; private ArrayAdapter<String> areaAdapter; // 初始化数据 private void initData() { // 初始化省份数据 provinceList = new ArrayList<String>(); provinceList.add("北京"); provinceList.add("上海"); provinceList.add("广东"); // 初始化城市数据 cityList = new ArrayList<String>(); cityList.add("北京市"); cityList.add("上海市"); cityList.add("广州市"); cityList.add("深圳市"); // 初始化地区数据 areaList = new ArrayList<String>(); areaList.add("东城区"); areaList.add("朝阳区"); areaList.add("黄浦区"); areaList.add("徐汇区"); } // 初始化控件 private void initView() { // 获取控件对象 spProvince = (Spinner) findViewById(R.id.sp_province); spCity = (Spinner) findViewById(R.id.sp_city); spArea = (Spinner) findViewById(R.id.sp_area); // 创建适配器对象 provinceAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, provinceList); cityAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, cityList); areaAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, areaList); // 设置下拉框样式 provinceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); areaAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 绑定适配器到控件 spProvince.setAdapter(provinceAdapter); spCity.setAdapter(cityAdapter); spArea.setAdapter(areaAdapter); // 设置监听器 spProvince.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 获取用户选择的省份 String province = provinceList.get(position); // 根据省份更新城市数据 updateCityData(province); // 更新下一级下拉框的数据 updateAreaData(cityList.get(0)); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spCity.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 获取用户选择的城市 String city = cityList.get(position); // 根据城市更新地区数据 updateAreaData(city); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } // 更新城市数据 private void updateCityData(String province) { // 根据省份获取城市数据 // 这里省略获取城市数据的代码 // 更新城市数据 cityAdapter.clear(); cityAdapter.addAll(cityList); cityAdapter.notifyDataSetChanged(); } // 更新地区数据 private void updateAreaData(String city) { // 根据城市获取地区数据 // 这里省略获取地区数据的代码 // 更新地区数据 areaAdapter.clear(); areaAdapter.addAll(areaList); areaAdapter.notifyDataSetChanged(); } ``` 在这个示例中,我们创建了三个下拉框控件,分别用于显示省份、城市和地区的数据。当用户选择省份时,我们会根据省份更新城市数据,并将第二个下拉框填充为新的城市数据。当用户选择城市时,我们会根据城市更新地区数据,并将第三个下拉框填充为新的地区数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值