安卓中ListView与Spinner在处理关联项时的不同(以全国省市级联为例)

来源:互联网 发布:访客模式软件下载 编辑:程序博客网 时间:2024/05/01 16:59

   本人最近在写安卓的一个小项目中需要进行级联操作,比如在listview或spinner中点击某一项时会在另一个listview和spiiner中显示出对应的子项。由于新学安卓,折腾了几天才将这个功能完成。其实在完成之后发现两者的差别并不大。主要在进行选项处理时事件监听的不同,listview为OnItemClickListener,而spiner为OnItemSelectedListener。

   现在用代码来详细说明:


package com.android.ListViewTest;

import java.lang.reflect.Array;
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity{
private ListView lv_province,lv_city;
private TextView tv_result;
String name;
private Spinner sp_pro,sp_city;
private ArrayAdapter<String> provinceAdapter,cityAdapter;
String[] province_info={"黑龙江", "吉林", "辽宁", "内蒙古", "河北", "山西", "陕西",
"山东", "新疆", "西藏", "青海", "甘肃", "宁夏", "河南", "江苏", "湖北", "浙江",
"安徽", "福建", "江西", "湖南", "贵州", "四川", "广东", "云南", "广西", "海南",
"台湾"};
String [][] city_info= {
{ "哈尔滨", "齐齐哈尔", "牡丹江", "佳木斯", "绥化", "黑河", "大兴安岭", "伊春", "大庆",
"鸡西", "鹤岗", "双鸭山" },
{ "长春", "吉林", "延吉", "四平", "通化", "白城", "辽源", "松原", "白山" },
{ "沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳",
"铁岭", "朝阳", "盘锦", "葫芦岛" },
{ "呼和浩特", "包头", "乌海", "集宁", "通辽", "赤峰", "鄂尔多斯", "临河", "锡林浩特",
"海拉尔", "乌兰浩特", "阿拉善左旗" },
{ "石家庄", "保定", "张家口", "唐山", "廊坊", "沧州", "衡水", "邢台", "邯郸", "秦皇岛" },
{ "太原", "大同", "阳泉", "晋中", "长治", "晋城", "临汾", "运城", "朔州", "忻州",
"离石" },
{ "西安", "三原", "延长", "榆林", "渭南", "商洛", "安康", "汉中", "宝鸡", "铜川" },
{ "济南", "青岛", "淄博", "德州", "烟台", "潍坊", "济宁", "泰安", "临沂", "菏泽",
"滨州", "东营", "威海", "枣庄", "日照", "莱芜", "聊城" },
{ "乌鲁木齐", "克拉玛依", "石河子", "昌吉", "吐鲁番", "库尔勒", "阿拉尔", "阿克苏",
"喀什", "伊宁", "塔城", "哈密", "和田", "阿勒泰", "阿图什", "博乐" },
{ "拉萨", "日喀则", "山南", "林芝", "昌都", "那曲", "阿里" },
{ "西宁", "海东", "黄南", "海南", "果洛", "玉树", "海西", "海北" },
{ "兰州", "定西", "平凉", "庆阳", "武威", "金昌", "张掖", "酒泉", "天水", "武都",
"临夏", "合作", "白银" },
{ "银川", "石嘴山", "吴忠", "固原", "中卫" },
{ "郑州", "安阳", "新乡", "许昌", "平顶山", "信阳", "南阳", "开封", "洛阳", "商丘",
"焦作", "鹤壁", "濮阳", "周口", "漯河", "驻马店", "三门峡", "济源" },
{ "南京", "无锡", "镇江", "苏州", "南通", "扬州", "盐城", "徐州", "淮安", "连云港",
"常州", "泰州", "宿迁" },
{ "武汉", "襄樊", "鄂州", "孝感", "黄冈", "黄石", "咸宁", "荆州", "宜昌", "恩施",
"十堰", "神农架", "随州", "荆门", "天门", "仙桃", "潜江" },
{ "杭州", "湖州", "嘉兴", "宁波", "绍兴", "台州", "温州", "丽水", "金华", "衢州",
"舟山" },
{ "合肥", "蚌埠", "芜湖", "淮南", "马鞍山", "安庆", "宿州", "阜阳", "亳州", "黄山站",
"滁州", "淮北", "铜陵", "宣城", "六安", "巢湖", "池州" },
{ "福州", "厦门", "宁德", "莆田", "泉州", "漳州", "龙岩", "三明", "南平" },
{ "南昌", "九江", "上饶", "抚州", "宜春", "吉安", "赣州", "景德镇", "萍乡", "新余",
"鹰潭" },
{ "长沙", "湘潭", "株洲", "衡阳", "郴州", "常德", "赫山区", "娄底", "邵阳", "岳阳",
"张家界", "怀化", "黔阳", "永州", "吉首" },
{ "贵阳", "遵义", "安顺", "都匀", "凯里", "铜仁", "毕节", "六盘水", "黔西" },
{ "成都", "攀枝花", "自贡", "绵阳", "南充", "达州", "遂宁", "广安", "巴中", "泸州",
"宜宾", "内江", "资阳", "乐山", "眉山", "凉山", "雅安", "甘孜", "阿坝",
"德阳", "广元" },
{ "广州", "韶关", "惠州", "梅州", "汕头", "深圳", "珠海", "顺德", "肇庆", "湛江",
"江门", "河源", "清远", "云浮", "潮州", "东莞", "中山", "阳江", "揭阳",
"茂名", "汕尾" },
{ "昆明", "大理", "红河", "曲靖", "保山", "文山", "玉溪", "楚雄", "普洱", "昭通",
"临沧", "怒江", "香格里拉", "丽江", "德宏", "景洪" },
{ "南宁", "崇左", "柳州", "来宾", "桂林", "梧州", "贺州", "贵港", "玉林", "百色",
"钦州", "河池", "北海", "防城港" }, { "海口", "三亚" },
{ "台北县", "高雄", "台南", "台中", "桃园", "新竹县", "宜兰", "马公", "嘉义" } };
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test_main);
//sp_pro=(Spinner) findViewById(R.id.sp_pro);
//sp_city=(Spinner) findViewById(R.id.sp_city);
lv_province=(ListView) findViewById(R.id.lv_province);
lv_city=(ListView) findViewById(R.id.lv_city);
tv_result=(TextView) findViewById(R.id.tv_result);
provinceAdapter=new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, province_info);
lv_province.setAdapter(provinceAdapter);
lv_province.setOnItemClickListener(new provinceSelectListener());

//sp_pro.setAdapter(provinceAdapter);
//sp_pro.setOnItemSelectedListener(new provinceSelectedListener());
//lv_province.setOnItemSelectedListener(new provinceSelectListener());
//lv_city.setOnItemSelectedListener(new citySelecteListener());

}
class provinceSelectListener implements android.widget.AdapterView.OnItemClickListener{
/*
* 此监听类为处理listview时的监听,注意为OnItemClickListener,并且需要从写其子方法
*
*
* */
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
/*
* 此处是对第二个listview中进行数据绑定,在本例中绑定的是city_info。
* 需要注意的是,在该例子中,省份为一维数组,而城市是安照每个身份对应的城市写成二维数组。
* 即每个省对应有多个城市,其对应为二维数组中的一维数组
*
* */
cityAdapter=new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, city_info[position]);
cityAdapter.
setDropDownViewResource(android.R.layout.simple_list_item_1);
lv_city.setAdapter(cityAdapter);//进行绑定
}


}


/*class provinceSelectedListener implements OnItemSelectedListener{

@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
cityAdapter=new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item, city_info[position]);
cityAdapter.
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp_city.setAdapter(cityAdapter);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}

}
*/
}


一下是我的布局文件:

<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="vertical"
    android:padding="10dp"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="城市"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/et_code"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:digits="1234567890"
            android:hint="输入条码"
            android:lines="1"
            android:maxLength="15" />

        <Button
            android:id="@+id/bt_search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="省市"
                android:textSize="18sp" />

            <ListView
                android:id="@+id/lv_province"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:divider="@null"
                android:overScrollMode="never"
                android:scrollbars="none" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="城市"
                android:textSize="18sp" />

            <ListView
                android:id="@+id/lv_city"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:divider="@null"
                android:overScrollMode="never"
                android:scrollbars="none" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

=========================

spinner的示例布局只需将listview换成spinner就好。由于本程序只是起示例作用,如果需要在第二个真正进行级联后的选择则继续在第二项中进行事件监听和处理即可。

本来准备附项目源码,可惜不会用.....不过代码粘贴下去就可以用了。(第一次写博客,写得不好,请见谅)


0 0
原创粉丝点击