package com.tiger.quicknews.activity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.text.Editable; import android.util.Log; import android.widget.EditText; import android.widget.TextView; import com.tiger.quicknews.R; import com.tiger.quicknews.adapter.CityAdapter; import com.tiger.quicknews.bean.CityItem; import com.tiger.quicknews.dao.CityData; import com.tiger.quicknews.wedget.city.ContactItemInterface; import com.tiger.quicknews.wedget.city.ContactListViewImpl; import com.umeng.analytics.MobclickAgent; import org.androidannotations.annotations.AfterInject; import org.androidannotations.annotations.AfterTextChange; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ItemClick; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.List; @EActivity(R.layout.activity_choose_city) public class ChooseCityActivity extends BaseActivity { private Context context_; @ViewById(R.id.listview) protected ContactListViewImpl listview; @ViewById(R.id.title) protected TextView mTitle; @ViewById(R.id.input_search_query) protected EditText searchBox; private String searchString; private CityAdapter adapter; private Object searchLock; boolean inSearchMode = false; private final static String TAG = "MainActivity2"; List<ContactItemInterface> contactList; List<ContactItemInterface> filterList; private SearchListTask curSearchTask = null; @AfterInject public void init() { context_ = ChooseCityActivity.this; searchLock = new Object(); filterList = new ArrayList<ContactItemInterface>(); contactList = CityData.getSampleContactList(); adapter = new CityAdapter(this, R.layout.city_item, contactList); } @AfterViews public void initView() { listview.setFastScrollEnabled(true); listview.setAdapter(adapter); mTitle.setText("选择城市"); } @ItemClick(R.id.listview) protected void onItemClick(int position) { List<ContactItemInterface> searchList = inSearchMode ? filterList : contactList; Intent intent = new Intent(); intent.putExtra("cityname", searchList.get(position).getDisplayInfo()); this.setResult(1001, intent); this.finish(); } @AfterTextChange(R.id.input_search_query) public void afterTextChanged(Editable s) { searchString = searchBox.getText().toString().trim().toUpperCase(); if (curSearchTask != null && curSearchTask.getStatus() != AsyncTask.Status.FINISHED) { try { curSearchTask.cancel(true); } catch (Exception e) { Log.i(TAG, "Fail to cancel running search task"); } } curSearchTask = new SearchListTask(); curSearchTask.execute(searchString); } private class SearchListTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { filterList.clear(); String keyword = params[0]; inSearchMode = (keyword.length() > 0); if (inSearchMode) { // get all the items matching this for (ContactItemInterface item : contactList) { CityItem contact = (CityItem) item; boolean isPinyin = contact.getFullName().toUpperCase() .indexOf(keyword) > -1; boolean isChinese = contact.getNickName().indexOf(keyword) > -1; if (isPinyin || isChinese) { filterList.add(item); } } } return null; } @Override protected void onPostExecute(String result) { synchronized (searchLock) { if (inSearchMode) { CityAdapter adapter = new CityAdapter(context_, R.layout.city_item, filterList); adapter.setInSearchMode(true); listview.setInSearchMode(true); listview.setAdapter(adapter); } else { CityAdapter adapter = new CityAdapter(context_, R.layout.city_item, contactList); adapter.setInSearchMode(false); listview.setInSearchMode(false); listview.setAdapter(adapter); } } } } @Override public void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override public void onPause() { super.onPause(); MobclickAgent.onPause(this); } }