第22章、OnItemSelectedListener事件与二级联动(从零开始学Android)

这篇博客详细介绍了在Android应用中实现二级联动的方法,主要聚焦于OnItemSelectedListener事件的使用。首先,创建了province.xml资源文件,包含了省份数组。接着,在activity_main.xml布局文件中添加两个Spinner控件。最后,通过MainActivity.java文件中的代码实现了选择监听事件,展示了事件触发时的效果。

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

  在Android App应用中,二级联动是应用极为广泛的,我们在上一章的基础上来学习一下如何实现。

  基本知识点:OnItemSelectedListener事件

一、界面

   1、新建province.xml件。

  在“res/values”位置新建province.xml文件。

  (1)province.xml文件位置如下图所示:

  

  (2)province.xml内容如下:  

  

  (3)代码  

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="provarray">
  4. <item>河南省</item>
  5. <item>河北省</item>
  6. <item>山东省</item>
  7. <item>山西省</item>
  8. </string-array>
  9. </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <string-array name="provarray">
        <item>河南省</item>
        <item>河北省</item>
        <item>山东省</item>
        <item>山西省</item>
    </string-array>    
</resources>

  2、打开“res/layout/activity_main.xml”文件。

   (1)分别从工具栏向activity拖出2个下拉列表框Spinner。控件来自Form Widgets。

  

  (2)打开activity_main.xml文件。   

<?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>

 

  3、界面如下

  

二、OnItemSelectedListener事件 

  1、打开“src/com.genwoxue.twolevelmenu/MainActivity.java”文件。

  然后输入以下代码:

package com.genwoxue.twolevelmenu;

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) {  
        	//没有选择时执行              
        }  
    }  
}

 

  2、最终效果如下:

    

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋会全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值