ps:借鉴http://blog.csdn.net/smbroe/article/details/43058455这位大神的作品写了一个library 大家可以直接拿过来用。
·······记得把CityDBManager.java里面的包名改成自己的······
library下载地址:https://github.com/Mildsgithub/citylists_library.git
mianactivity里代码:
package com.xm.pc.city_list;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.xm.pc.city_library.CityAdapter;
import com.xm.pc.city_library.CityBean;
import com.xm.pc.city_library.CityDBManager;
import com.xm.pc.city_library.QuicLocationBar;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
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_main);
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(MainActivity.this, mCityNames);
mCityLit.setAdapter(adapter);
alphaIndexer = adapter.getCityMap();
mCityLit.setOnItemClickListener(new CityListOnItemClick());
}
private ArrayList<CityBean> getCityNames() {
CityDBManager dbManager = new CityDBManager(MainActivity.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();
cityModel.setCityName(cursor.getString(cursor
.getColumnIndex("CityName")));
cityModel.setNameSort(cursor.getString(cursor
.getColumnIndex("NameSort")));
names.add(cityModel);
} while (cursor.moveToNext());
}
database.close();
return names;
}
private class CityListOnItemClick implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long arg3) {
CityBean cityModel = (CityBean) mCityLit.getAdapter()
.getItem(pos);
Toast.makeText(MainActivity.this, cityModel.getCityName(),
Toast.LENGTH_SHORT).show();
}
}
private class LetterListViewListener implements
QuicLocationBar.OnTouchLetterChangedListener {
@Override
public void touchLetterChanged(String s) {
// TODO Auto-generated method stub
if (alphaIndexer.get(s) != null) {
int position = alphaIndexer.get(s);
mCityLit.setSelection(position);
}
}
}
}
main对应的布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xm.pc.city_list.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="vertical" >
<ListView
android:id="@+id/city_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:divider="#9E9E9E"
android:dividerHeight="2dp" />
</LinearLayout>
<TextView
android:id="@+id/city_dialog"
android:layout_width="80.0dip"
android:layout_height="80.0dip"
android:layout_gravity="center"
android:gravity="center"
android:textColor="#000"
android:textSize="30.0sp"
android:visibility="gone" />
<com.xm.pc.city_library.QuicLocationBar
android:id="@+id/city_loactionbar"
android:layout_width="30.0dip"
android:layout_height="fill_parent"
android:layout_gravity="right|center"
android:paddingBottom="2dp" />
</FrameLayout>