package com.city.list.main;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.city.list.db.DBManager;
import com.city.list.main.MyLetterListView.OnTouchingLetterChangedListener;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 城市列表
*
* @author sy
*
*/
public class CityList extends Activity
{
private BaseAdapter adapter;
private ListView mCityLit;
private TextView overlay;
private MyLetterListView letterListView;
private HashMap<String, Integer> alphaIndexer;// 存放存在的汉语拼音首字母和与之对应的列表位置
private String[] sections;// 存放存在的汉语拼音首字母
private Handler handler;
private OverlayThread overlayThread;
private SQLiteDatabase database;
private ArrayList<CityModel> mCityNames;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.city_list);
mCityLit = (ListView) findViewById(R.id.city_list);
letterListView = (MyLetterListView) findViewById(R.id.cityLetterListView);
DBManager dbManager = new DBManager(this);
dbManager.openDateBase();
dbManager.closeDatabase();
database = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);
mCityNames = getCityNames();
database.close();
letterListView.setOnTouchingLetterChangedListener(new LetterListViewListener());
alphaIndexer = new HashMap<String, Integer>();
handler = new Handler();
overlayThread = new OverlayThread();
initOverlay();
setAdapter(mCityNames);
mCityLit.setOnItemClickListener(new CityListOnItemClick());
}
/**
* 从数据库获取城市数据
*
* @return
*/
private ArrayList<CityModel> getCityNames()
{
ArrayList<CityModel> names = new ArrayList<CityModel>();
Cursor cursor = database.rawQuery("SELECT * FROM T_City ORDER BY NameSort", null);
for (int i = 0; i < cursor.getCount(); i++)
{
cursor.moveToPosition(i);
CityModel cityModel = new CityModel();
cityModel.setCityName(cursor.getString(cursor.getColumnIndex("CityName")));
cityModel.setNameSort(cursor.getString(cursor.getColumnIndex("NameSort")));
names.add(cityModel);
}
return names;
}
/**
* 城市列表点击事件
*
* @author sy
*
*/
class CityListOnItemClick implements OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3)
{
CityModel cityModel = (CityModel) mCityLit.getAdapter().getItem(pos);
Toast.makeText(CityList.this, cityModel.getCityName(), Toast.LENGTH_SHORT).show();
}
}
/**
* 为ListView设置适配器
*
* @param list
*/
private void setAdapter(List<CityModel> list)
{
if (list != null)
{
adapter = new ListAdapter(this, list);
mCityLit.setAdapter(adapter);
}
}
/**
* ListViewAdapter
*
* @author sy
*
*/
private class ListAdapter extends BaseAdapter
{
private LayoutInflater inflater;
private List<CityModel> list;
public ListAdapter(Context context, List<CityModel> list)
{
this.inflater = LayoutInflater.from(context);
this.list = list;
alphaIndexer = new HashMap<String, Integer>();
sections = new String[list.size()];
for (int i = 0; i < list.size(); i++)
{
// 当前汉语拼音首字母
// getAlpha(list.get(i));
String currentStr = list.get(i).getNameSort();
// 上一个汉语拼音首字母,如果不存在为“ ”
String previewStr = (i - 1) >= 0 ? list.get(i - 1).getNameSort() : " ";
if (!previewStr.equals(currentStr))
{
String name = list.get(i).getNameSort();
alphaIndexer.put(name, i);
sections[i] = name;
}
}
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position)
{
return list.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.alpha = (TextView) convertView.findViewById(R.id.alpha);
holder.name = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(list.get(position).getCityName());
String currentStr = list.get(position).getNameSort();
String previewStr = (position - 1) >= 0 ? list.get(position - 1).getNameSort() : " ";
if (!previewStr.equals(currentStr))
{
holder.alpha.setVisibility(View.VISIBLE);
holder.alpha.setText(currentStr);
} else
{
holder.alpha.setVisibility(View.GONE);
}
return convertView;
}
private class ViewHolder
{
TextView alpha;
TextView name;
}
}
// 初始化汉语拼音首字母弹出提示框
private void initOverlay()
{
LayoutInflater inflater = LayoutInflater.from(this);
overlay = (TextView) inflater.inflate(R.layout.overlay, null);
overlay.setVisibility(View.INVISIBLE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
WindowManager windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(overlay, lp);
}
private class LetterListViewListener implements OnTouchingLetterChangedListener
{
@Override
public void onTouchingLetterChanged(final String s)
{
if (alphaIndexer.get(s) != null)
{
int position = alphaIndexer.get(s);
mCityLit.setSelection(position);
overlay.setText(sections[position]);
overlay.setVisibility(View.VISIBLE);
handler.removeCallbacks(overlayThread);
// 延迟一秒后执行,让overlay为不可见
handler.postDelayed(overlayThread, 1500);
}
}
}
// 设置overlay不可见
private class OverlayThread implements Runnable
{
@Override
public void run()
{
overlay.setVisibility(View.GONE);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
应用源码之CityList高仿58城市列表.zip (55个子文件)
应用源码之CityList高仿58城市列表
CityList
project.properties 361B
.classpath 475B
.settings
org.eclipse.core.resources.prefs 55B
src
com
city
list
main
MyLetterListView.java 3KB
CityModel.java 463B
MainActivity.java 855B
CityList.java 7KB
db
DBManager.java 2KB
libs
pinyin4j-2.5.0.jar 184KB
res
drawable-mdpi
ic_launcher.png 3KB
drawable-ldpi
ic_launcher.png 2KB
values
strings.xml 182B
layout
city_list.xml 1KB
list_item.xml 2KB
main.xml 432B
overlay.xml 318B
raw
china_city_name 12KB
drawable-hdpi
contact_list_icon.png 5KB
ic_launcher.png 4KB
bin
classes
com
city
list
main
CityList$ListAdapter$ViewHolder.class 820B
CityList$LetterListViewListener.class 2KB
MainActivity$1.class 968B
R$string.class 427B
R$layout.class 491B
MyLetterListView.class 4KB
MyLetterListView$OnTouchingLetterChangedListener.class 328B
R$id.class 618B
CityList.class 7KB
CityList$ListAdapter.class 4KB
BuildConfig.class 345B
R$attr.class 340B
CityList$OverlayThread.class 881B
R$drawable.class 448B
MainActivity.class 964B
R$raw.class 396B
R.class 575B
CityModel.class 768B
CityList$CityListOnItemClick.class 2KB
db
DBManager.class 3KB
resources.ap_ 20KB
jarlist.cache 120B
res
crunch
drawable-mdpi
ic_launcher.png 2KB
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
contact_list_icon.png 2KB
ic_launcher.png 4KB
CityList.apk 169KB
classes.dex 120KB
dexedLibs
pinyin4j-2.5.0-3f89af8ce1550e759075af583b0b5d7e.jar 141KB
annotations-f8a83684881af84cae48389c17c1dce5.jar 943B
AndroidManifest.xml 783B
proguard.cfg 1KB
.project 844B
AndroidManifest.xml 783B
gen
com
city
list
main
BuildConfig.java 160B
R.java 1KB
共 55 条
- 1
资源评论
Soft_Leader
- 粉丝: 1338
- 资源: 1627
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功