自定义弹窗(三) 弹窗选择三级联动城市
来源:互联网 发布:校园网络建设招代理 编辑:程序博客网 时间:2024/05/21 06:31
上一期 自定义弹窗(二)讲了监听自定义弹窗的按钮。
这一期做一个自定义选择联动城市的自定义弹窗。
效果图
核心代码如下:
alertdialog_sel_city.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/AlertDialogTop_Layout" android:layout_width="500dp" android:layout_height="wrap_content" android:background="@drawable/alertdialogtop_bg" > <!-- 弹窗Title --> <TextView android:id="@+id/AlertDialogTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="15dp" android:textColor="@color/skyblue" android:textSize="24sp" /> <Button android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:background="@drawable/alertdialog_close" /> </RelativeLayout> <RelativeLayout android:id="@+id/AlertDialogContent_Layout" android:layout_width="500dp" android:layout_height="wrap_content" android:layout_below="@+id/AlertDialogTop_Layout" android:background="@drawable/alertdialog_bg" > <RelativeLayout android:id="@+id/add_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" > <RelativeLayout android:id="@+id/add_province_layout" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/add_province_txt" android:layout_width="100dp" android:layout_height="50dp" android:gravity="center|right" android:hint="@string/add_province" android:textColor="@color/black" android:textSize="20sp" /> <Spinner android:id="@+id/add_province_box" android:layout_width="match_parent" android:layout_height="50dp" android:layout_toRightOf="@+id/add_province_txt" android:textColor="@color/black" android:textSize="20sp" > </Spinner> </RelativeLayout> <RelativeLayout android:id="@+id/add_city_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/add_province_layout" android:layout_marginTop="10dp" > <TextView android:id="@+id/add_city_txt" android:layout_width="100dp" android:layout_height="50dp" android:gravity="center|right" android:hint="@string/add_city" android:textColor="@color/black" android:textSize="20sp" /> <Spinner android:id="@+id/add_city_box" android:layout_width="match_parent" android:layout_height="50dp" android:layout_toRightOf="@+id/add_city_txt" android:textColor="@color/black" android:textSize="20sp" > </Spinner> </RelativeLayout> <RelativeLayout android:id="@+id/add_street_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/add_city_layout" android:layout_marginTop="10dp" > <TextView android:id="@+id/add_street_txt" android:layout_width="100dp" android:layout_height="50dp" android:gravity="center|right" android:hint="@string/add_street" android:textColor="@color/black" android:textSize="20sp" /> <Spinner android:id="@+id/add_street_box" android:layout_width="match_parent" android:layout_height="50dp" android:layout_toRightOf="@+id/add_street_txt" android:textColor="@color/black" android:textSize="20sp" > </Spinner> </RelativeLayout> </RelativeLayout> </RelativeLayout> <RelativeLayout android:id="@+id/AlertDialogEnd_Layout" android:layout_width="500dp" android:layout_height="wrap_content" android:layout_below="@+id/AlertDialogContent_Layout" android:background="@drawable/alertdialogend_bg" > <LinearLayout android:id="@+id/AlertDialogBtn_Layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="5dp" > <LinearLayout android:id="@+id/ok_btn_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/alertdialog_btn_bg" > <TextView android:id="@+id/ok_btn_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="确定" android:textColor="@color/black" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:id="@+id/cancle_btn_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="@drawable/alertdialog_btn_bg" > <TextView android:id="@+id/cancle_btn_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="取消" android:textColor="@color/black" android:textSize="20sp" /> </LinearLayout> </LinearLayout> </RelativeLayout></RelativeLayout>
Main.java
package com.test.jooylife.myalert3;import java.util.ArrayList;import com.test.jooylife.myalert3.R;import android.app.Activity;import android.app.AlertDialog;import android.graphics.Typeface;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Spinner;import android.widget.TextView;public class Main extends Activity{/** 微软雅黑默认 */private static Typeface typefacenormal = Typeface.create("微软雅黑", Typeface.NORMAL);/** 微软雅黑粗体 */private static Typeface typefacebold = Typeface.create("微软雅黑", Typeface.BOLD);private AlertDialog add_addressdlg;private String selcityid = "";private ArrayList<WeatherAreaModel> weatherAreaModels;private WeatherAreaModel nowWeatherAreaModel;private Spinner add_province_box;private ArrayList<WeatherAreaModel> provinceList = new ArrayList<WeatherAreaModel>();private ArrayAdapter<String> provinceAdapter;private Spinner add_city_box;private ArrayList<WeatherAreaModel> cityList = new ArrayList<WeatherAreaModel>();private ArrayAdapter<String> cityAdapter;private Spinner add_street_box;private ArrayList<WeatherAreaModel> streetList = new ArrayList<WeatherAreaModel>();private ArrayAdapter<String> streetAdapter;private Button add_address_close;private LinearLayout add_address_ok;private LinearLayout add_address_cancle;private TextView message_txt;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);weatherAreaModels = WeatherAreaList.GetList();selcityid = "101010100";GetNowWeatherArea(selcityid);Button clickbtn = (Button) this.findViewById(R.id.clickbtn);message_txt = (TextView) this.findViewById(R.id.message_txt);clickbtn.setOnClickListener(listener);}private OnClickListener listener = new OnClickListener(){@Overridepublic void onClick(View v){switch (v.getId()){case R.id.clickbtn:CreateAddress();break;}}};/** * 创建天气城市弹窗 * */private void CreateAddress(){if (add_addressdlg != null){if (add_addressdlg.isShowing()){add_addressdlg.dismiss();}add_addressdlg = null;}View add_addressdlgView;LayoutInflater factory = LayoutInflater.from(this);add_addressdlg = new AlertDialog.Builder(this).setCancelable(false).create();add_addressdlgView = factory.inflate(R.layout.alertdialog_sel_city, null);add_addressdlg.setView(add_addressdlgView);add_addressdlg.show();Window window = add_addressdlg.getWindow();add_addressdlg.setContentView(R.layout.alertdialog_sel_city);TextView title = (TextView) window.findViewById(R.id.AlertDialogTitle);title.setTypeface(typefacenormal);title.setText("选择天气预报城市");TextView add_province_txt = (TextView) window.findViewById(R.id.add_province_txt);add_province_box = (Spinner) window.findViewById(R.id.add_province_box);add_province_txt.setTypeface(typefacenormal);GetProvinceList();if (nowWeatherAreaModel != null){BindProvince(nowWeatherAreaModel.areaname1());} else{BindProvince(null);}add_province_box.setOnItemSelectedListener(new OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id){String name = (String) add_province_box.getSelectedItem();WeatherAreaModel model = GetProvinceByName(name);GetCityList(model.areaname1());if (nowWeatherAreaModel != null){BindCity(nowWeatherAreaModel.areaname2());} else{BindCity(null);}}@Overridepublic void onNothingSelected(AdapterView<?> arg0){// TODO Auto-generated method stub}});TextView add_city_txt = (TextView) window.findViewById(R.id.add_city_txt);add_city_box = (Spinner) window.findViewById(R.id.add_city_box);add_city_txt.setTypeface(typefacenormal);add_city_box.setOnItemSelectedListener(new OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id){String name = (String) add_city_box.getSelectedItem();WeatherAreaModel model = GetCityByName(name);GetStreetList(model.areaname2());if (nowWeatherAreaModel != null){BindStreet(nowWeatherAreaModel.areaname3());} else{BindStreet(null);}}@Overridepublic void onNothingSelected(AdapterView<?> arg0){// TODO Auto-generated method stub}});TextView add_street_txt = (TextView) window.findViewById(R.id.add_street_txt);add_street_box = (Spinner) window.findViewById(R.id.add_street_box);add_street_txt.setTypeface(typefacenormal);add_street_box.setOnItemSelectedListener(new OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id){String name = (String) add_street_box.getSelectedItem();WeatherAreaModel model = GetStreetByName(name);selcityid = model.areaid();}@Overridepublic void onNothingSelected(AdapterView<?> arg0){// TODO Auto-generated method stub}});add_address_close = (Button) window.findViewById(R.id.btn_close);add_address_ok = (LinearLayout) window.findViewById(R.id.ok_btn_layout);TextView ok_btn_txt = (TextView) window.findViewById(R.id.ok_btn_txt);ok_btn_txt.setTypeface(typefacebold);add_address_cancle = (LinearLayout) window.findViewById(R.id.cancle_btn_layout);TextView cancle_btn_txt = (TextView) window.findViewById(R.id.cancle_btn_txt);cancle_btn_txt.setTypeface(typefacebold);add_address_close.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){add_addressdlg.dismiss();}});add_address_cancle.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){add_addressdlg.dismiss();}});add_address_ok.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){GetNowWeatherArea(selcityid);add_addressdlg.dismiss();}});}/** * 当前天气城市 * * @param ctiyid */private void GetNowWeatherArea(String areaid){for (WeatherAreaModel item : weatherAreaModels){if (item.areaid().equals(areaid)){nowWeatherAreaModel = item;break;}}if (nowWeatherAreaModel == null){nowWeatherAreaModel = weatherAreaModels.get(0);}Message msg = new Message();msg.what = 0;msg.obj = "当前选择城市:id:" + nowWeatherAreaModel.areaid() + "," + nowWeatherAreaModel.areaname1() + "-" + nowWeatherAreaModel.areaname2() + "-" + nowWeatherAreaModel.areaname3();messageHandler.sendMessage(msg);}/** * 根据名称获取一级城市 * * @param name * @return */private WeatherAreaModel GetProvinceByName(String name){WeatherAreaModel model = null;for (WeatherAreaModel item : provinceList){if (item.areaname1().equals(name)){model = item;break;}}return model;}/** * 根据名称获取二级城市 * * @param name * @return */private WeatherAreaModel GetCityByName(String name){WeatherAreaModel model = null;for (WeatherAreaModel item : cityList){if (item.areaname2().equals(name)){model = item;break;}}return model;}/** * 根据名称获取三级城市 * * @param name * @return */private WeatherAreaModel GetStreetByName(String name){WeatherAreaModel model = null;for (WeatherAreaModel item : streetList){if (item.areaname3().equals(name)){model = item;break;}}return model;}/** * 获取一级城市列表 */private void GetProvinceList(){provinceList = new ArrayList<WeatherAreaModel>();for (WeatherAreaModel item : weatherAreaModels){if (!checkProvince(item.areaname1())){provinceList.add(item);}}}/** * 绑定省 * * @param provincename */private void BindProvince(String provincename){ArrayList<String> list = new ArrayList<String>();for (WeatherAreaModel item : provinceList){list.add(item.areaname1());}provinceAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);provinceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);add_province_box.setAdapter(provinceAdapter);if (provincename == null){add_province_box.setSelection(0);} else{for (int i = 0; i < provinceList.size(); i++){if (provincename.equals(provinceList.get(i).areaname1())){add_province_box.setSelection(i);break;}}}}/** * 是否已存在该一级城市 * * @param name * @return */private boolean checkProvince(String name){boolean t = false;for (WeatherAreaModel item : provinceList){if (item.areaname1().equals(name)){t = true;break;}}return t;}/** * 获取二级城市 * * @param pname */private void GetCityList(String pname){cityList = new ArrayList<WeatherAreaModel>();for (WeatherAreaModel item : weatherAreaModels){if (item.areaname1().equals(pname)){if (!checkCity(item.areaname2())){cityList.add(item);}}}}/** * 绑定市 * * @param cityname */private void BindCity(String cityname){ArrayList<String> list = new ArrayList<String>();for (WeatherAreaModel item : cityList){list.add(item.areaname2());}cityAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);add_city_box.setAdapter(cityAdapter);if (cityname == null){add_city_box.setSelection(0);} else{for (int i = 0; i < cityList.size(); i++){if (cityname.equals(cityList.get(i).areaname2())){add_city_box.setSelection(i);break;}}}}/** * 是否已存在该二级城市 * * @param name * @return */private boolean checkCity(String name){boolean t = false;for (WeatherAreaModel item : cityList){if (item.areaname2().equals(name)){t = true;break;}}return t;}/** * 获取三级城市 * * @param pname */private void GetStreetList(String pname){streetList = new ArrayList<WeatherAreaModel>();for (WeatherAreaModel item : weatherAreaModels){if (item.areaname2().equals(pname)){if (!checkStreet(item.areaname3())){streetList.add(item);}}}}/** * 绑定区 * * @param streetname */private void BindStreet(String streetname){ArrayList<String> list = new ArrayList<String>();for (WeatherAreaModel item : streetList){list.add(item.areaname3());}streetAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);streetAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);add_street_box.setAdapter(streetAdapter);if (streetname == null){add_street_box.setSelection(0);} else{for (int i = 0; i < streetList.size(); i++){if (streetname.equals(streetList.get(i).areaname3())){add_street_box.setSelection(i);break;}}}}/** * 是否已存在该三级城市 * * @param name * @return */private boolean checkStreet(String name){boolean t = false;for (WeatherAreaModel item : streetList){if (item.areaname3().equals(name)){t = true;break;}}return t;}private Handler messageHandler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case 0:message_txt.setText(msg.obj + "");break;}}};}
本例代码
1 0
- 自定义弹窗(三) 弹窗选择三级联动城市
- android 城市选择三级联动
- android选择城市三级联动
- 城市选择的三级联动
- 好用的城市选择(三级联动)
- jquery选择城市、县、区三级联动
- 城市选择下拉菜单三级联动
- HTML5手机三级联动城市选择代码
- wheel自定义控件,实现城市三级联动,时间选择的功能简单使用
- wheel自定义控件,实现城市三级联动,时间选择的功能简单使用
- 城市选择二级联动、三级联动的思路
- Javascript 城市联动选择,支持一级,二级,三级联动
- 城市三级联动
- 城市三级联动
- js 城市三级联动
- 城市的三级联动
- 城市三级联动
- 城市的三级联动
- 《模式识别与智能计算-matlab技术实现》学习笔记一
- Python challenge_14
- c++编译过程
- IOS 如何获得UIView的父控制器
- “孵化”大数据,深圳云基地亮相南国
- 自定义弹窗(三) 弹窗选择三级联动城市
- python3.2+libsvm3.17的配置
- Exchange Server 2013 高可用部署系列(一)环境准备
- 鼠标滑过文字,显示隐藏的div,离开后div隐藏
- iOS程序模拟器手机运行都正常,archiving出错:Undefined symbols for architecture arm64
- linux 命令行
- 你相信我们的爱会创造奇迹吗
- 推荐ios学习的博客,很不错的博文
- jQuery之DOM操作一