Android source code: Get a list of cities across the country similar to contact sorting

Android source code: Get a list of cities across the country similar to contact sorting

Functional classification: Tools

Supported platforms: Android

Operating environment: Eclipse

Development language: Java

Development tool: Eclipse

Source code size: 1.24MB

Source code download address: http://down..com/data/1977281

Source code introduction

Project source address: https://github.com/kk-java/ChineseCityList

The Chinese city list is displayed similarly to a mobile phone address book. You can quickly locate the city by touching the first letter of the city's pinyin on the right side of the screen, and you can also quickly search by Chinese or pinyin.

** Fixed the issue of demo sorting errors on Xiaomi phones

Friends in need can refer to it!

Please forgive me if there is any infringement..

Source code running screenshot

    Run screenshot

    Run screenshot

    Run screenshot

Source code snippet

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

Source code download address: http://down..com/data/1977281

<<:  Android source code download: Sina Weibo

>>:  Using pointers in Swift

Recommend

What does Android 5.0 look like? See here

[[122241]] Android 5.0 Lollipop is one of the mos...

[Case] ​​How did Tmall’s 618 Fans Carnival get fans excited step by step?

Tmall launched a new concept of the 618 festival ...

To build a personal brand on Douyin, you need to do these 5 things well!

The author of this article once created a video o...

How to master information flow video promotion?

Currently, the trend of online video advertising ...

How to become a Douyin Blue V certified promoter? How much do I need to pay?

What is the Douyin Blue V certification project? ...

Is there a "wealth code" hidden in "Robinson Crusoe"? !

Today, many people watch the stock market and hop...

Analysis of the underlying logic of the user incentive system!

Background of the User Incentive System The user ...

Kuaishou Information Stream Ads oCPC Smart Delivery Guide

In the process of investing in Kuaishou informati...

The future of Zen architecture is uncertain

After the K10 era, AMD dug a huge pit for itself,...