在Android App应用中,二级联动是应用极为广泛的,我们在上一章的基础上来学习一下如何实现。
基本知识点:OnItemSelectedListener事件
一、界面
1、新建province.xml件。
在“res/values”位置新建province.xml文件。
(1)province.xml文件位置如下图所示:
(2)province.xml内容如下:
(3)代码
- 河南省
- 河北省
- 山东省
- 山西省
2、打开“res/layout/activity_main.xml”文件。
(1)分别从工具栏向activity拖出2个下拉列表框Spinner。控件来自Form Widgets。
(2)打开activity_main.xml文件。
二、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 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(
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、最终效果如下: