Android开发--全国各城市列表并按首字母排序加快速定位

       在很多商业的App中都需要进行城市的选择,一般我们会对城市按首字母进行排序,以前的项目中也曾经遇到,今天拿来复习一下。思路如下:

      1.首先我们需要一个包含全国各城市的数据库文件或Json,Xml文件都可以,我从网络上搜到了一个数据库.db的文件,该数据库包含了中国各城市的中文名称以及首字母。首先将该数据库文件拷贝到我们的工程目录的res/raw文件夹之下(该文件夹不会被Android编译),当我们访问数据库时首先检查该数据库文件是否存在(一般数据库文件会被Android系统放在/data/data/packagename/databases文件夹之下),如果不存在则将数据库拷贝过来。之后可以按首字母排序查询数据库。

       2.对于快速定位的实现:使用QuickLocationBar来进行实现,使用一个HashMap保存首字母和该首字母城市的第一个出现的位置,在OnTouchLetterChangedListener中实现ListView的快速定位。关于QuickLocationBar的实现的具体细节请看我之前的博客:Android开发--根据字母快速定位的侧边栏实现

显示效果


代码如下:

CityActivity类:

package com.example.citytest;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.citytest.widget.QuicLocationBar;
import com.example.citytest.widget.QuicLocationBar.OnTouchLetterChangedListener;

public class CityActivity extends Activity {

	private ListView mCityLit;
	private TextView overlay;
	private QuicLocationBar mQuicLocationBar;
	private HashMap<String, Integer> alphaIndexer;
	private ArrayList<CityBean> mCityNames;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_city);

		mQuicLocationBar = (QuicLocationBar) findViewById(R.id.city_loactionbar);
		mQuicLocationBar
				.setOnTouchLitterChangedListener(new LetterListViewListener());
		overlay = (TextView) findViewById(R.id.city_dialog);
		mCityLit = (ListView) findViewById(R.id.city_list);
		mQuicLocationBar.setTextDialog(overlay);
		initList();
	}

	private void initList() {
		mCityNames = getCityNames();
		CityAdapter adapter = new CityAdapter(CityActivity.this, mCityNames);
		mCityLit.setAdapter(adapter);
		alphaIndexer = adapter.getCityMap();
		mCityLit.setOnItemClickListener(new CityListOnItemClick());
	}

	private ArrayList<CityBean> getCityNames() {
		CityDBManager dbManager = new CityDBManager(CityActivity.this);
		dbManager.openDateBase();
		dbManager.closeDatabase();
		SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(CityDBManager.DB_PATH
				+ "/" + CityDBManager.DB_NAME, null);
		ArrayList<CityBean> names = new ArrayList<CityBean>();
		Cursor cursor = database.rawQuery(
				"SELECT * FROM T_City ORDER BY NameSort", null);
		if (cursor.moveToFirst()) {
			do {
				CityBean cityModel = new CityBean();
				cityMod
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值