Android 城市选择  可用于第一次进入应用程序定位失败后手动选择城市。

实现代码

<pre name="code" class="java">package com.jock.cityselecter;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.IBinder;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;import com.jock.cityselecter.adapter.MyBaseAdapter;
import com.jock.cityselecter.adapter.SortAdapter;
import com.jock.cityselecter.bean.RegionInfo;
import com.jock.cityselecter.bean.SortModel;
import com.jock.cityselecter.db.RegionDAO;
import com.jock.cityselecter.utils.CharacterParser;
import com.jock.cityselecter.utils.ClearEditText;
import com.jock.cityselecter.utils.PinyinComparator;
import com.jock.cityselecter.widget.SideBar;public class CitySelecterActivity extends Activity
{private List<RegionInfo> provinceList;private List<RegionInfo> citysList;private List<String> provinces;private ListView sortListView;private SideBar sideBar;private TextView dialog;private SortAdapter adapter;private ClearEditText mClearEditText;private List<RegionInfo> mReMenCitys;// 热门城市列表private MyGridViewAdapter gvAdapter;private GridView mGridView;private RelativeLayout iv_left;/*** 汉字转换成拼音的类*/private CharacterParser characterParser;private List<SortModel> SourceDateList;/*** 根据拼音来排列ListView里面的数据类*/private PinyinComparator pinyinComparator;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_city_selecter);initData();initViews();}private void initData(){provinceList = RegionDAO.getProvencesOrCity(1);provinceList.addAll(RegionDAO.getProvencesOrCity(2));citysList = new ArrayList<RegionInfo>();mReMenCitys = new ArrayList<RegionInfo>();provinces = new ArrayList<String>();for (RegionInfo info : provinceList){provinces.add(info.getName().trim());}mReMenCitys.add(new RegionInfo(180, 13, "武汉"));mReMenCitys.add(new RegionInfo(194, 13, "孝感"));mReMenCitys.add(new RegionInfo(32, 1, "重庆"));mReMenCitys.add(new RegionInfo(2, 1, "北京"));mReMenCitys.add(new RegionInfo(25, 1, "上海"));mReMenCitys.add(new RegionInfo(77, 6, "深圳"));mReMenCitys.add(new RegionInfo(76, 6, "广州"));mReMenCitys.add(new RegionInfo(197, 14, "长沙"));mReMenCitys.add(new RegionInfo(343, 1, "天津"));}private void initViews(){iv_left = (RelativeLayout) findViewById(R.id.iv_left);View view = View.inflate(this, R.layout.head_city_list, null);mGridView = (GridView) view.findViewById(R.id.id_gv_remen);gvAdapter = new MyGridViewAdapter(this, mReMenCitys);mGridView.setAdapter(gvAdapter);mGridView.setSelector(new ColorDrawable(Color.TRANSPARENT));// 实例化汉字转拼音类characterParser = CharacterParser.getInstance();pinyinComparator = new PinyinComparator();sideBar = (SideBar) findViewById(R.id.sidrbar);dialog = (TextView) findViewById(R.id.dialog);sideBar.setTextView(dialog);// 设置右侧触摸监听sideBar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener(){@Overridepublic void onTouchingLetterChanged(String s){// 该字母首次出现的位置int position = adapter.getPositionForSection(s.charAt(0));if (position != -1){sortListView.setSelection(position);}}});sortListView = (ListView) findViewById(R.id.country_lvcountry);sortListView.addHeaderView(view);sortListView.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id){// 这里要利用adapter.getItem(position)来获取当前position所对应的对象Toast.makeText(getApplication(), ((SortModel) adapter.getItem(position - 1)).getName(), Toast.LENGTH_SHORT).show();hideSoftInput(mClearEditText.getWindowToken());Intent data = new Intent();data.putExtra("cityName", ((SortModel) adapter.getItem(position - 1)).getName());setResult(1110, data);}});// SourceDateList =// filledData(getResources().getStringArray(R.array.date));SourceDateList = filledData(provinceList);// 根据a-z进行排序源数据Collections.sort(SourceDateList, pinyinComparator);adapter = new SortAdapter(this, SourceDateList);sortListView.setAdapter(adapter);mClearEditText = (ClearEditText) findViewById(R.id.filter_edit);// 根据输入框输入值的改变来过滤搜索mClearEditText.addTextChangedListener(new TextWatcher(){@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count){// 当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表filterData(s.toString());}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after){}@Overridepublic void afterTextChanged(Editable s){}});iv_left.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){hideSoftInput(mClearEditText.getWindowToken());CitySelecterActivity.this.finish();}});mGridView.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id){String cityName = mReMenCitys.get(position).getName();Toast.makeText(getApplication(), cityName, Toast.LENGTH_SHORT).show();hideSoftInput(mClearEditText.getWindowToken());Intent data = new Intent();data.putExtra("cityName", cityName);setResult(1110, data);}});}/*** 为ListView填充数据* * @param date* @return*/private List<SortModel> filledData(List<RegionInfo> date){List<SortModel> mSortList = new ArrayList<SortModel>();for (int i = 0; i < date.size(); i++){SortModel sortModel = new SortModel();sortModel.setName(date.get(i).getName());// 汉字转换成拼音String pinyin = characterParser.getSelling(date.get(i).getName());String sortString = pinyin.substring(0, 1).toUpperCase();// 正则表达式,判断首字母是否是英文字母if (sortString.matches("[A-Z]")){sortModel.setSortLetters(sortString.toUpperCase());} else{sortModel.setSortLetters("#");}mSortList.add(sortModel);}return mSortList;}/*** 根据输入框中的值来过滤数据并更新ListView* * @param filterStr*/private void filterData(String filterStr){List<SortModel> filterDateList = new ArrayList<SortModel>();if (TextUtils.isEmpty(filterStr)){filterDateList = SourceDateList;} else{if (!provinces.contains(filterStr)){filterDateList.clear();for (SortModel sortModel : SourceDateList){String name = sortModel.getName();if (name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())){filterDateList.add(sortModel);}}} else{filterDateList.clear();for (int i = 0; i < provinceList.size(); i++){String name = provinceList.get(i).getName();if (name.equals(filterStr)){filterDateList.addAll(filledData(RegionDAO.getProvencesOrCityOnParent(provinceList.get(i).getId())));}}}}// 根据a-z进行排序Collections.sort(filterDateList, pinyinComparator);adapter.updateListView(filterDateList);}private class MyGridViewAdapter extends MyBaseAdapter<RegionInfo, GridView>{private LayoutInflater inflater;public MyGridViewAdapter(Context ct, List<RegionInfo> list){super(ct, list);inflater = LayoutInflater.from(ct);}@Overridepublic View getView(int position, View convertView, ViewGroup parent){ViewHolder holder = null;if (convertView == null){holder = new ViewHolder();convertView = inflater.inflate(R.layout.item_remen_city, null);holder.id_tv_cityname = (TextView) convertView.findViewById(R.id.id_tv_cityname);convertView.setTag(holder);} else{holder = (ViewHolder) convertView.getTag();}RegionInfo info = mReMenCitys.get(position);holder.id_tv_cityname.setText(info.getName());return convertView;}class ViewHolder{TextView id_tv_cityname;}}@Overrideprotected void onResume(){super.onResume();}/* 多种隐藏软件盘方法的其中一种* * @param token*/protected void hideSoftInput(IBinder token){if (token != null){InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}}
}

源码下载

Android 城市选择增加热门城市相关推荐

  1. Android 城市选择,热门城市,全部城市(美团、滴滴、淘宝)

    demo链接:https://download.csdn.net/download/meixi_android/10819638 实现效果: 实现方法:非常简洁快速,三步集成实现地区选择器 1.导入c ...

  2. 智慧城市7大热门城市的发展

    未来生活照进现实--7大热门智慧城市项目和世界8大顶级智慧城市盘点 智慧城市越来越多地走进人们的视野,随着物联网技术的普及和发展,未来将出现更多智慧城市,给人们的生活和工作带来便利. 目前智慧城市在全 ...

  3. android开发-城市选择页面

    首先看一下效果动图:          数据来源是公司的一个api,网址就不贴了,数据格式大概是这样: 数据Bean: public class BaseBean implements Seriali ...

  4. React项目实战之租房app项目(四)长列表性能优化城市选择模块渲染列表

    前言 目录 前言 一.长列表性能优化 1.1 概述 1.2 懒渲染 1.3 可视区渲染(React-virtualized) 二.react-virtualized组件 2.1 概述 2.2 基本使用 ...

  5. Android 天气APP(十七)热门城市 - 国内城市

    上一篇:Android 天气APP(十六)热门城市 - 海外城市 页面标题优化.添加加载弹窗 新版------------------- 一.主页面标题栏优化 二.加载等待弹窗 三.文章源码 旧版-- ...

  6. android百度地图定位、城市列表选择搜索

    百度地图的集成在百度地图的开发文档中有详细的介绍:Android定位SDK  | 百度地图API SDK 本文介绍的主要功能有: kotlin语言搭建的项目 百度地图的定位 选择城市(包括省市县三级搜 ...

  7. [RN] 全国城市列表选择 (包含定位城市、热门城市、全国城市)

    全国城市列表选择 (包含定位城市.热门城市.全国城市) 用ScrollView 实现,解决 SectionList 实现的卡顿问题 实现效果如图: 代码实现如图: 主逻辑文件 cityList.js ...

  8. Android 如何选择城市-CityPicker

    CityPicker 现在使用比较多的类似美团等APP的城市选择界面. 2步即可实现,就是这么简单粗暴! Gif image APK 下载demo.apk体验. Install Gradle: com ...

  9. Android 城市选择万能控件

    Android 城市选择万能控件 Android 城市选择万能控件,选择城市,选择汽车品牌等等,支持按照a-z.# 排序等的选择控件,废话不多说直接上效果图: (开的Android模拟器录得gif,有 ...

最新文章

  1. mysql查询日期胜负_MySQL面试题:查询每个日期的胜负次数
  2. 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速
  3. Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场
  4. VC实现HTTP协议的GET和POST方法
  5. Python基础教程:字符串中split与rsplit的方法原理教程
  6. 维基百科用php,在PHP中解析维基百科标记的最佳方法是什么?
  7. ActiveMQ无法启动
  8. 开源网站云查杀方案,搭建自己的云杀毒。
  9. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  10. SVN登录时不断弹出用户名密码输入
  11. win10 linux声音,win10电脑突然没有声音的10种修复方法
  12. 项目申请html模板,做项目申请报告范文-有模板
  13. HBase简介、搭建环境及安装部署
  14. js通过银行卡号获取银行卡号获取所属银行,银行名称,银行编码,银行卡种
  15. 本地idea通过tomcat启动服务停滞
  16. 智源社区AI周刊No.97:Bengio新论文用GFlowNets统一生成模型;北大发布AI for EDA数据集...
  17. Second season seventh episode,Ross finds out Rachel like him,what will he do???
  18. B 吃雪糕(科林明伦杯)
  19. 谷歌浏览器关闭安全模式, 访问 http网站
  20. Java 12 来了,我们应该采用嘛?

热门文章

  1. TVS管和ESD管的技术指标和选型指南-嘉立创推荐
  2. 豆瓣电影TOP250爬取,并获得相关类型的推荐
  3. ZUK Z2 Pro(Z2121) 免解锁BL 免rec Magisk Xposed ROOT 救砖 ZUI 4.0.247
  4. CAD如何转换成图片?一键完成文件转换
  5. 【进程控制(进程退出、孤儿进程、僵尸进程)_Linux】
  6. 大数据笔记--SparkSQL(第一篇)
  7. 超级IP名片PK云集微店,社交电商哪家强?
  8. 八大排序详解-超详细
  9. 威纶通UI模板,威纶通,HMI模板,触摸屏模板,威纶通触摸屏
  10. MySQL索引底层:B+树详解