package com.andbase.demo.activity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import com.ab.activity.AbActivity;
import com.ab.fragment.AbDialogFragment.AbDialogOnLoadListener;
import com.ab.fragment.AbLoadDialogFragment;
import com.ab.task.AbTask;
import com.ab.task.AbTaskItem;
import com.ab.task.AbTaskListListener;
import com.ab.util.AbCharacterParser;
import com.ab.util.AbDialogUtil;
import com.ab.util.AbLogUtil;
import com.ab.util.AbToastUtil;
import com.ab.view.sample.AbLetterFilterListView;
import com.ab.view.titlebar.AbTitleBar;
import com.andbase.R;
import com.andbase.demo.adapter.CityListAdapter;
import com.andbase.demo.model.City;
import com.andbase.global.MyApplication;
public class CityListActivity extends AbActivity{
private MyApplication application;
private List<City> list = null;
private ListView mListView = null;
private EditText mSearchEditText = null;
private AbTitleBar mAbTitleBar = null;
private CityListAdapter mCityListAdapter = null;
private AbLoadDialogFragment mDialogFragment = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setAbContentView(R.layout.city_list);
application = (MyApplication) abApplication;
mAbTitleBar = this.getTitleBar();
mAbTitleBar.setTitleText(R.string.city_list_name);
mAbTitleBar.setLogo(R.drawable.button_selector_back);
mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
mAbTitleBar.setTitleTextMargin(10, 0, 0, 0);
mAbTitleBar.setLogoLine(R.drawable.line);
// 获取ListView对象
View headerView = LayoutInflater.from(this).inflate(R.layout.city_header, null);
mListView = (ListView) this.findViewById(R.id.listView);
mListView.addHeaderView(headerView);
AbLetterFilterListView letterView = (AbLetterFilterListView)this.findViewById(R.id.letterView);
mSearchEditText = (EditText) this.findViewById(R.id.editText);
// ListView数据
list = new ArrayList<City>();
// 使用自定义的Adapter
mCityListAdapter = new CityListAdapter(this, list);
mListView.setAdapter(mCityListAdapter);
// item被点击事件
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
AbToastUtil.showToast(CityListActivity.this, "点击"+position);
}
});
//显示进度框
mDialogFragment = AbDialogUtil.showLoadDialog(this, R.drawable.ic_load, "查询中,请等一小会");
mDialogFragment
.setAbDialogOnLoadListener(new AbDialogOnLoadListener() {
@Override
public void onLoad() {
// 下载网络数据
downTask();
}
});
mSearchEditText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
String str = mSearchEditText.getText().toString().trim();
int length = str.length();
if (length > 0) {
filterData(str);
} else {
downTask();
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
}
public void downTask() {
AbLogUtil.prepareLog(CityListActivity.class);
AbTask mAbTask = AbTask.newInstance();
final AbTaskItem item = new AbTaskItem();
item.setListener(new AbTaskListListener() {
@Override
public List<?> getList() {
List<City> newList = null;
try {
newList = filledData(getResources().getStringArray(R.array.list));
} catch (Exception e) {
}
return newList;
}
@Override
public void update(List<?> paramList) {
list.clear();
list.addAll((List<City>)paramList);
//通知Dialog
mDialogFragment.loadFinish();
mCityListAdapter.notifyDataSetChanged();
}
});
mAbTask.execute(item);
}
/**
* 为ListView填充数据
* @param date
* @return
*/
private List<City> filledData(String [] array){
List<City> newList = new ArrayList<City>();
//实例化汉字转拼音类
AbCharacterParser characterParser = AbCharacterParser.getInstance();
for(int i=0; i<array.length; i++){
City city = new City();
city.setName(array[i]);
//汉字转换成拼音
String pinyin = characterParser.getSelling(array[i]);
String sortString = pinyin.substring(0, 1).toUpperCase();
// 正则表达式,判断首字母是否是英文字母
if(sortString.matches("[A-Z]")){
city.setFirstLetter(sortString.toUpperCase());
}else{
city.setFirstLetter("#");
}
newList.add(city);
}
Collections.sort(newList);
return newList;
}
/**
* 根据输入框中的值来过滤数据并更新ListView
* @param filterStr
*/
private void filterData(String filterStr){
//实例化汉字转拼音类
AbCharacterParser characterParser = AbCharacterParser.getInstance();
List<City> filterDateList = new ArrayList<City>();
if(!TextUtils.isEmpty(filterStr)){
for(City city : list){
String name = city.getName();
if(name.indexOf(filterStr) != -1 || characterParser.getSelling(name).startsWith(filterStr)){
filterDateList.add(city);
}
}
}
// 根据a-z进行排序
Collections.sort(filterDateList);
mCityListAdapter.updateListView(filterDateList);
}
@Override
protected void onResume() {
super.onResume();
}
public void onPause() {
super.onPause();
}
}