package com.droid.carson;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.droid.carson.Activity02.LocateIn;
import com.droid.carson.MyLetterListView.OnTouchingLetterChangedListener;
import com.parttime.base.WithTitleActivity;
import com.qingmu.jianzhidaren.R;
import com.quark.jianzhidaren.BaseActivity;
public class Activity01 extends WithTitleActivity implements OnItemClickListener{
public static final String EXTRA_TITLE = "extra_title";
public static final String EXTRA_CITYLIST_CITY = "citylist_city";
public static final String EXTRA_CITY = "city";
private BaseAdapter adapter;
private ListView personList;
private TextView overlay; // 对话框首字母textview
private MyLetterListView letterListView; // A-Z listview
private HashMap<String, Integer> alphaIndexer;// 存放存在的汉语拼音首字母和与之对应的列表位置
private String[] sections;// 存放存在的汉语拼音首字母
private Handler handler;
private OverlayThread overlayThread; // 显示首字母对话框
protected ArrayList<City> allCity_lists; // 所有城市列表
private ArrayList<City> city_lists;// 城市列表
ListAdapter.TopViewHolder topViewHolder;
private String lngCityName = "定位失败";
// private ImageButton backImb;// 返回
private ClearEditText clearEdt;
WindowManager windowManager;
@Override
protected ViewGroup getLeftWrapper() {
return null;
}
@Override
protected ViewGroup getRightWrapper() {
return null;
}
@Override
protected TextView getCenter() {
return null;
}
// private RelativeLayout topLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_main);
super.onCreate(savedInstanceState);
// topLayout = (RelativeLayout) findViewById(R.id.title);
// topLayout.setBackgroundColor(getResources().getColor(
// R.color.guanli_common_color));
Intent intent = getIntent();
if(intent != null){
String title = intent.getStringExtra(EXTRA_TITLE);
if(title != null){
center(title);
left(TextView.class, R.string.back);
}else {
left(ImageButton.class, R.drawable.back);
}
}else {
left(ImageButton.class, R.drawable.back);
}
lngCityName = getIntent().getExtras()
.getString(EXTRA_CITYLIST_CITY, "定位失败");
// backImb = (ImageButton) findViewById(R.id.backImb);
// backImb.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View arg0) {
// finish();
// }
// });
clearEdt = (ClearEditText) findViewById(R.id.filter_edit);
clearEdt.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
filterData(arg0.toString());
}
});
personList = (ListView) findViewById(R.id.list_view);
allCity_lists = new ArrayList<City>();
letterListView = (MyLetterListView) findViewById(R.id.MyLetterListView01);
letterListView
.setOnTouchingLetterChangedListener(new LetterListViewListener());
// Activity02.setLocateIn(new GetCityName());
alphaIndexer = new HashMap<String, Integer>();
handler = new Handler();
overlayThread = new OverlayThread();
personList.setOnItemClickListener(this);
personList.setAdapter(adapter);
initOverlay();
hotCityInit();
setAdapter(allCity_lists);
}
/**
* 热门城市
*/
public void hotCityInit() {
City city = new City("", "-");
// allCity_lists.add(city);
// city = new City("", "-");
allCity_lists.add(city);
city = new City("上海", "");
allCity_lists.add(city);
city = new City("北京", "");
allCity_lists.add(city);
city = new City("广州", "");
allCity_lists.add(city);
city = new City("深圳", "");
allCity_lists.add(city);
city = new City("武汉", "");
allCity_lists.add(city);
city = new City("天津", "");
allCity_lists.add(city);
city = new City("西安", "");
allCity_lists.add(city);
city = new City("南京", "");
allCity_lists.add(city);
city = new City("杭州", "");
allCity_lists.add(city);
city = new City("成都", "");
allCity_lists.add(city);
city = new City("重庆", "");
allCity_lists.add(city);
city_lists = getCityList();
allCity_lists.addAll(city_lists);
}
private ArrayList<City> getCityList(String ccity) {
DBHelper dbHelper = new DBHelper(this);
ArrayList<City> list = new ArrayList<City>();
try {
dbHelper.createDataBase();
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from area ", null);
City city;
while (cursor.moveToNext()) {
city = new City(cursor.getString(1), cursor.getString(2));
if (city.name.contains(ccity)) {
Log.e("city", city.name);
list.add(city);
}
}
if (list.size() > 0) {
list.add(new City("", "-"));
}
cursor.close();
db.close();
} catch (IOException e) {
e.printStackTrace();
}
Collections.sort(list, comparator);
return list;
}
private ArrayList<City> getCityList() {
DBHelper dbHelper = new DBHelper(this);
ArrayList<City> list = new ArrayList<City>();
try {
dbHelper.createDataBase();
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from area", null);
City city;
while (cursor.moveToNext()) {
city = new City(cursor.getString(1), cursor.getString(2));
list.add(city);
}
cursor.close();
db.close();
} catch (IOException e) {
e.printStackTrace();
}
Collections.sort(list, comparator);
return list;
}
/**
* a-z排序
*/
Comparator comparator = new Comparator<City>() {
@Override
public int compare(City lhs, City rhs) {
String a = lhs.getPinyi().substring(0, 1);
String b = rhs.getPinyi().substring(0, 1);
int flag = a.compareTo(b);
if (flag == 0) {
return a.compareTo(b);
} else {
return flag;
}
}
};
private void setAdapter(List<City> list) {
adapter = new ListAdapter(this, list);
personList.setAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String currentCity = allCity_lists.get(position).getName();
if (!"".equals(currentCity)) {
// 这里要利用adapter.getItem(position)来获取当前position所对应的对象
Toast.makeText(getApplication(),
"成功切换到城市:" + allCity_lists.get(position).getName(),
Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra(EXTRA_CITY, allCity_lists.get(position).getName());
Activity01.this.setResult(RESULT_OK, intent);
Activity01.this.finish();
}
}
public class ListAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<City> list;
final int VIEW_TYPE = 2;
public ListAdapter(Context context, List<City> 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++) {
// 当前汉语拼音首字母
String currentStr = getAlpha(list.get(i).getPinyi());
// 上一个汉语拼音首字母,如果不存在为“ ”
String previewStr = (i - 1) >= 0 ? getAlpha(list.get(i - 1)
.getPinyi()) : " ";
if (!previewStr.equals(currentStr)) {
String name = getAlpha(list.get(i).getPinyi());
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 int getItemViewType(int position) {
// TODO Auto-generated method stub
int type = 0;
// if (position == 0) {
// type = 2;
// } else if (position == 1) {
// type = 1;
// }
if (position == 0)
type = 1;
return type;
}
@Override
public int getViewTypeCount() {// 这里需要返回需要集中布局类型,总大小为类型的种数的下标
return VIEW_TYPE;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int viewType = getItemViewType(position);
if (viewType == 1) {
if (convertView == null) {
topViewHolder = new TopViewHolder();
convertView = inflater.inflate(R.layout.frist_list_item,
null);
topViewHolder.alpha = (TextView) convertView
.findViewById(R.id.alpha);
topViewHolder.name = (TextView) convertView
.findViewById(R.id.lng_city);
convertView.setTag(topViewHolder);
} else {
topViewHolder = (TopViewHolder) convertView.getTag();
}
topViewHolder.name.setText(lngCityName);
topViewHolder.alpha.setVisibility(View.VISIBLE);
topViewHolder.alpha.setText("定位城市");
topViewHolder.name.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (!"定位失败".equals(lngCityName)) {
// ToastUtil.showLongToast(lngCityName + "");
topViewHolder.name.setClickable(false);
Toast.makeText(getApplication(),
"成功切换到城市:" + lngCityName,
Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
// intent.putExtra("province", province);
intent.putExtra(EXTRA_CITY, lngCityName);
Activity01.this.setResult(RESULT_OK, intent);
Activity01.this.finish();
}
}
});
}
// else if (viewType == 2) {
// final ShViewHolder shViewHolder;
// if (convertView == null) {
// shViewHolder = new ShViewHolder();
// convertView = inflater.inflate(R.layout.search_item, null);
// shViewHolder.editText = (ClearEditText) convertView
// .findViewById(R.id.sh);
// convertView.setTag(shViewHolder);
// } else {
// shViewHolder = (ShViewHolder) convertView.getTag();
// }
else {
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();
}
if (position >= 0) {
holder.name.setText(list.get(position).getName());
String currentStr = getAlpha(list.get(position).getPinyi());
String previewStr = (position - 1) >= 0 ? getAlpha(list
.get(position - 1).getPinyi()) : " ";
if (!previewStr.equals(currentStr)) {
holder.alpha.setVisibility(View.VISIBLE);
if (currentStr.equals("#")) {
currentStr = "热门城市";
}
holder.alpha.setText(currentStr);
} else {
holder.alpha.setVisibility(View.GONE);
}
}
}
return convertView;
}
private class ViewHolder {
TextView alpha; // 首字母标题
TextView name; // 城市名字
}
private class TopViewHolder {
TextView alpha; // 首字母标题
TextView name; // 城市名字
}
private class ShViewHolder {
ClearEditText editText;
}
}
// 初始化汉语拼音首字母弹出提示框
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) this
.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(overlay, lp);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (overlay != null && windowManager != null) {
windowManager.removeView(overlay);
}
}
private class LetterListViewListener implements
OnTouchingLetterChangedListener {
@Override
public void onTouchingLetterChanged(final String s) {
if (alphaIndexer.get(s) != null) {
int position = alphaIndexer.get(s);
personList.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);
}
}
// 获得汉语拼音首字母
private String getAlpha(String str) {
if (str.equals("-")) {
return "&";
}
if (str == null) {
return "#";
}
if (str.trim().length() == 0) {
return "#";
}
char c = str.trim().substring(0, 1).charAt(0);
// 正则表达式,判断首字母是否是英文字母
Pattern pattern = Pattern.compile("^[A-Za-z]+$");
if (pattern.matcher(c + "").matches()) {
return (c + "").toUpperCase();
} else {
return "#";
}
}
private class GetCityName implements LocateIn {
@Override
public void getCityName(String name) {
System.out.println(name);
if (topViewHolder.name != null) {
lngCityName = name;
adapter.notifyDataSetChanged();
}
}
}
/**
* 根据输入框中的值来过滤数据并更新ListView
*
* @param filterStr
*/
private void filterData(String filterStr) {
Log.e("tag", "filter data");
if (TextUtils.isEmpty(filterStr)) {
allCity_lists.clear();
hotCityInit();
setAdapter(allCity_lists);
} else {
allCity_lists.clear();
city_lists = getCityList(filterStr);
allCity_lists.addAll(city_lists);
setAdapter(allCity_lists);
// filterDateList.clear();
// for (SortModel sortModel : SourceDateList) {
// String name = sortModel.getName();
// if (name.indexOf(filterStr.toString()) != -1
// || characterParser.getSelling(name).startsWith(
// filterStr.toString())) {
// filterDateList.add(sortModel);
// }
// }
}
}
public static interface DiyAction extends Serializable {
void clicked(int index, String city, Serializable extra, BaseActivity activity);
}
}