packagecom.Johnson.index;
importjava.util.ArrayList;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.PixelFormat;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.text.Editable;
importandroid.text.TextWatcher;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.view.WindowManager;
importandroid.view.WindowManager.LayoutParams;
importandroid.widget.AbsListView;
importandroid.widget.AdapterView;
importandroid.widget.BaseAdapter;
importandroid.widget.EditText;
importandroid.widget.ListView;
importandroid.widget.TextView;
importandroid.widget.Toast;
/**
*
* 城市选择 activity
*
* @author Johnson
*
*/
publicclassCitySelectActivityextendsActivityimplements
ListView.OnScrollListener {
// 城市选择
privateListView listView;
privateArrayList listBasicData =newArrayList();// 存放原始数据;
privateArrayList list =newArrayList();// 存放临时数据
privateLayoutInflater mInflater;
privateRemoveWindow mRemoveWindow =newRemoveWindow();
privateWindowManager mWindowManager;
privateTextView mDialogText;
privatebooleanmShowing;
privatebooleanmReady;
privateString mPrevLetter ="";
privateEditText filterEdit;
Handler mHandler =newHandler();
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//原始数据
listBasicData = City.getCityList();
//初始化显示数据加入字幕索引item
initShowData();
this.setContentView(R.layout.city_select);
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listView = (ListView) findViewById(R.id.list_view);
finalmyAdapter adapter =newmyAdapter();
listView.setAdapter(adapter);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 设置单选模型
listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
publicvoidonItemClick(AdapterView> parent, View view,
intposition,longid) {
Toast.makeText(getApplicationContext(), list.get(position).getCityName(), Toast.LENGTH_SHORT).show();
}
});
filterEdit = (EditText) findViewById(R.id.edit_filter);
filterEdit.addTextChangedListener(newTextWatcher() {
publicvoidonTextChanged(CharSequence s,intstart,intbefore,
intcount) {
}
publicvoidbeforeTextChanged(CharSequence s,intstart,intcount,
intafter) {
}
publicvoidafterTextChanged(Editable s) {
finalString txt = s.toString().toLowerCase();
if(list !=null) {
list.clear();
if(listBasicData !=null&& listBasicData.size() >0) {
for(City mCity : listBasicData) {
String pinyin = mCity.getCityPinyin();
String name = mCity.getCityName();
if(pinyin.startsWith(txt)
|| pinyin.startsWith(txt.toLowerCase())
|| pinyin.startsWith(txt.toUpperCase())
|| (name.indexOf(txt) != -1)) {
list.add(mCity);
}
}
if("".equals(txt)) {
//当字母过滤框内容为空重新初始化数据
initShowData();
}
if("".equals(txt)) {
mReady =true;
}else{
mReady =false;
}
// List数据变化时, 刷新Dialog
// dialog.notifyDataSetChanged();
adapter.notifyDataSetChanged();
}
}
}
});
initIndexTextView();
}
@Override
publicvoidonScroll(AbsListView view,intfirstVisibleItem,
intvisibleItemCount,inttotalItemCount) {
intvisibleItemIndex = firstVisibleItem;
// int visibleItemIndex = firstVisibleItem + (visibleItemCount / 2 - 1);
if(mReady) {
City city = (City) list.get(visibleItemIndex);
String firstLetter = city.getCityPinyin();
System.out.println("@"+ firstLetter);
if(firstLetter.equals("-")) {
firstLetter = firstLetter.substring(1,2);
}else{
firstLetter = firstLetter.substring(0,1);
}
if(!mShowing && firstLetter.equals(mPrevLetter)) {
mShowing =true;
mDialogText.setVisibility(View.VISIBLE);
}
mDialogText.setTextSize(40);
mDialogText.setText(firstLetter);
mHandler.removeCallbacks(mRemoveWindow);
mHandler.postDelayed(mRemoveWindow,1000);
mPrevLetter = firstLetter;
}
}
@Override
publicvoidonScrollStateChanged(AbsListView arg0,intarg1) {
// TODO Auto-generated method stub
}
privatevoidremoveWindow() {
if(mShowing) {
mShowing =false;
mDialogText.setVisibility(View.INVISIBLE);
}
}
privatefinalclassRemoveWindowimplementsRunnable {
publicvoidrun() {
removeWindow();
}
}
@Override
protectedvoidonResume() {
super.onResume();
mReady =true;
}
@Override
protectedvoidonPause() {
super.onPause();
removeWindow();
mReady =false;
}
@Override
protectedvoidonDestroy() {
super.onDestroy();
if(mWindowManager !=null) {
mWindowManager.removeView(mDialogText);
}
mReady =false;
}
classmyAdapterextendsBaseAdapter {
View convertView;
City city;
@Override
publicbooleanisEnabled(intposition) {
if(city !=null) {
return!city.getCityName().startsWith("-");
}else{
returntrue;
}
}
@Override
publicintgetCount() {
// TODO Auto-generated method stub
returnlist.size();
}
@Override
publicObject getItem(intposition) {
// TODO Auto-generated method stub
returnlist.get(position);
}
@Override
publiclonggetItemId(intposition) {
// TODO Auto-generated method stub
returnposition;
}
@Override
publicView getView(intposition, View convertVie, ViewGroup arg2) {
// TODO Auto-generated method stub
convertView = convertVie;
TextView tv;
city = (City) list.get(position);
if(city.getCityName().startsWith("-")) {
convertView = mInflater.inflate(
R.layout.city_list_item_city_index,null);
tv = (TextView) convertView
.findViewById(R.id.city_list_item_city_index);
tv.setText(city.getCityName().substring(1,
city.getCityName().length()));
}else{
convertView = mInflater.inflate(R.layout.city_list_item_city,
null);
tv = (TextView) convertView
.findViewById(R.id.city_list_item_city);
tv.setText(city.getCityName());
}
returnconvertView;
}
}
/**
* 初始化用于显示的数据
*
* @author johnson
*
* */
publicvoidinitShowData() {
list.clear();
list = Utils.rebuildList(listBasicData);
}
/**
* 初始化程序列表索引IndexTextView
*
* @author johnson
* */
publicvoidinitIndexTextView() {
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
listView.setOnScrollListener(this);
mDialogText = (TextView) mInflater
.inflate(R.layout.list_position,null);
mDialogText.setVisibility(View.INVISIBLE);
mHandler.post(newRunnable() {
publicvoidrun() {
mReady =true;
WindowManager.LayoutParams lp =newWindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_STARTING,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(mDialogText, lp);
}
});
}
}