Android源码:获取全国城市列表 类似于联系人排序
创始人
2025-01-09 17:50:54
0

功能分类:工具

支持平台:Android

运行环境:Eclipse

开发语言:Java

开发工具:Eclipse

源码大小:1.24MB

源码下载地址:http://down.51cto.com/data/1977281

源码简介

项目源地址:https://github.com/kk-java/ChineseCityList

中国城市列表,类似手机通讯录显示方式,可以通过触摸屏幕右边城市拼音首字母快速定位,还可通过中文、拼音快速查找。

** 修改demo在小米手机上排序错误的问题

需要的朋友可以参考一下!

如有侵权,请见谅..

源码运行截图

    运行截图

    运行截图

    运行截图

源码片段

  1. package com.liucanwen.citylist; 
  2.   
  3. import java.util.ArrayList; 
  4. import java.util.List; 
  5.   
  6. import android.app.Activity; 
  7. import android.content.Context; 
  8. import android.os.AsyncTask; 
  9. import android.os.Bundle; 
  10. import android.text.Editable; 
  11. import android.text.TextWatcher; 
  12. import android.util.Log; 
  13. import android.view.View; 
  14. import android.widget.AdapterView; 
  15. import android.widget.EditText; 
  16. import android.widget.Toast; 
  17.   
  18. import com.liucanwen.citylist.adapter.CityAdapter; 
  19. import com.liucanwen.citylist.data.CityData; 
  20. import com.liucanwen.citylist.model.CityItem; 
  21. import com.liucanwen.citylist.widget.ContactItemInterface; 
  22. import com.liucanwen.citylist.widget.ContactListViewImpl; 
  23.   
  24. public class CityListActivity extends Activity implements TextWatcher 
  25.     private Context context_ = CityListActivity.this; 
  26.   
  27.     private ContactListViewImpl listview; 
  28.   
  29.     private EditText searchBox; 
  30.     private String searchString; 
  31.   
  32.     private Object searchLock = new Object(); 
  33.     boolean inSearchMode = false; 
  34.   
  35.     private final static String TAG = "MainActivity2"; 
  36.   
  37.     List contactList; 
  38.     List filterList; 
  39.     private SearchListTask curSearchTask = null; 
  40.   
  41.     @Override 
  42.     public void onCreate(Bundle savedInstanceState) 
  43.     { 
  44.         super.onCreate(savedInstanceState); 
  45.         setContentView(R.layout.citylist); 
  46.   
  47.         filterList = new ArrayList(); 
  48.         contactList = CityData.getSampleContactList(); 
  49.   
  50.         CityAdapter adapter = new CityAdapter(this,R.layout.city_item, contactList); 
  51.   
  52.         listview = (ContactListViewImpl) this.findViewById(R.id.listview); 
  53.         listview.setFastScrollEnabled(true); 
  54.         listview.setAdapter(adapter); 
  55.   
  56.         listview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
  57.         { 
  58.             @Override 
  59.             public void onItemClick(AdapterView parent, View v, int position, 
  60.                     long id) 
  61.             { 
  62.                 List searchList = inSearchMode ? filterList 
  63.                         : contactList; 
  64.   
  65.                 Toast.makeText(context_, 
  66.                         searchList.get(position).getDisplayInfo(), 
  67.                         Toast.LENGTH_SHORT).show(); 
  68.             } 
  69.         }); 
  70.   
  71.         searchBox = (EditText) findViewById(R.id.input_search_query); 
  72.         searchBox.addTextChangedListener(this); 
  73.     } 
  74.   
  75.     @Override 
  76.     public void afterTextChanged(Editable s) 
  77.     { 
  78.         searchString = searchBox.getText().toString().trim().toUpperCase(); 
  79.   
  80.         if (curSearchTask != null 
  81.                 && curSearchTask.getStatus() != AsyncTask.Status.FINISHED) 
  82.         { 
  83.             try 
  84.             { 
  85.                 curSearchTask.cancel(true); 
  86.             } catch (Exception e) 
  87.             { 
  88.                 Log.i(TAG, "Fail to cancel running search task"); 
  89.             } 
  90.   
  91.         } 
  92.         curSearchTask = new SearchListTask(); 
  93.         curSearchTask.execute(searchString); 
  94.     } 
  95.   
  96.     @Override 
  97.     public void beforeTextChanged(CharSequence s, int start, int count, 
  98.             int after) 
  99.     { 
  100.     } 
  101.   
  102.     @Override 
  103.     public void onTextChanged(CharSequence s, int start, int before, int count) 
  104.     { 
  105.         // do nothing 
  106.     } 
  107.   
  108.     private class SearchListTask extends AsyncTask 
  109.     { 
  110.   
  111.         @Override 
  112.         protected String doInBackground(String... params) 
  113.         { 
  114.             filterList.clear(); 
  115.   
  116.             String keyword = params[0]; 
  117.   
  118.             inSearchMode = (keyword.length() > 0); 
  119.   
  120.             if (inSearchMode) 
  121.             { 
  122.                 // get all the items matching this 
  123.                 for (ContactItemInterface item : contactList) 
  124.                 { 
  125.                     CityItem contact = (CityItem) item; 
  126.   
  127.                     boolean isPinyin = contact.getFullName().toUpperCase().indexOf(keyword) > -1; 
  128.                     boolean isChinese = contact.getNickName().indexOf(keyword) > -1; 
  129.   
  130.                     if (isPinyin || isChinese) 
  131.                     { 
  132.                         filterList.add(item); 
  133.                     } 
  134.   
  135.                 } 
  136.   
  137.             } 
  138.             return null; 
  139.         } 
  140.   
  141.         protected void onPostExecute(String result) 
  142.         { 
  143.   
  144.             synchronized (searchLock) 
  145.             { 
  146.   
  147.                 if (inSearchMode) 
  148.                 { 
  149.   
  150.                     CityAdapter adapter = new CityAdapter(context_,R.layout.city_item, filterList); 
  151.                     adapter.setInSearchMode(true); 
  152.                     listview.setInSearchMode(true); 
  153.                     listview.setAdapter(adapter); 
  154.                 } else 
  155.                 { 
  156.                     CityAdapter adapter = new CityAdapter(context_,R.layout.city_item, contactList); 
  157.                     adapter.setInSearchMode(false); 
  158.                     listview.setInSearchMode(false); 
  159.                     listview.setAdapter(adapter); 
  160.                 } 
  161.             } 
  162.   
  163.         } 
  164.     } 
  165.   
  166.  

源码下载地址:http://down.51cto.com/data/1977281

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...