package my.project.easyrecharge.activity; import java.lang.reflect.Type; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Locale; import my.project.easyrecharge.F.Method; import my.project.easyrecharge.R; import my.project.easyrecharge.adapter.AdaSchool; import my.project.easyrecharge.contants.Key; import my.project.easyrecharge.model.School; import my.project.easyrecharge.view.AlphaView; import my.project.easyrecharge.view.AlphaView.OnAlphaChangedListener; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; import com.google.gson.reflect.TypeToken; /** * School Choose Page * * @author roy * @email onecoders@gmail.com * * @TODO 只获取学校的id/name/icon信息,用于显示和选择 * @TODO invoke setResult() after chosen before return */ public class ActChooseSchool extends ActDataload implements OnItemClickListener, OnAlphaChangedListener { private ListView listView; private List<School> list; private AlphaView alphaView; private TextView overlay; private WindowManager windowManager; private AdaSchool adapter; private HashMap<String, Integer> alphaIndexer; private OverlayThread overlayThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_choose_school); init(); } private void init() { initActionBar(); initViews(); } @Override protected void initAbContent() { setAbTitle(R.string.activity_title_school_chosen); } private void initViews() { listView = (ListView) findViewById(R.id.listview_school); listView.setOnItemClickListener(this); list = new ArrayList<School>(); alphaIndexer = new HashMap<String, Integer>(); overlayThread = new OverlayThread(); alphaView = (AlphaView) findViewById(R.id.alphaView); alphaView.setOnAlphaChangedListener(this); initOverlay(); } 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) getSystemService(Context.WINDOW_SERVICE); windowManager.addView(overlay, lp); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { School school = list.get(position); Intent intent = new Intent(); intent.putExtra(Key.SCHOOL_JSON, toJson(school)); setResult(RESULT_OK, intent); finish(); } @Override protected void onResume() { super.onResume(); loadContent(); } private void loadContent() { loadDataVolley(true, Method.QUERY_SHCOOL, ""); } @Override protected void disposeResult(String apiName, String content) { super.disposeResult(apiName, content); if (!apiName.equals(Method.QUERY_SHCOOL)) return; list.clear(); try { Type collectionType = new TypeToken<List<School>>() { }.getType(); List<School> newList = fromJson(content, collectionType); list.addAll(newList); } catch (Exception e) { e.printStackTrace(); showToast(R.string.error_data); } if (list.size() > 0) { Collections.sort(list, comparator); initAlphaIndexer(); setAdatper(); } } private void initAlphaIndexer() { for (int i = 0; i < list.size(); i++) { String currentAlpha = list.get(i).getAlpha(); String previewAlpha = (i - 1) >= 0 ? list.get(i - 1).getAlpha() : " "; if (!previewAlpha.equals(currentAlpha)) { String alpha = list.get(i).getAlpha(); alphaIndexer.put(alpha, i); } } } private void setAdatper() { if (adapter == null) { adapter = new AdaSchool(this, list); listView.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } } private Handler handler = new Handler(); private class OverlayThread implements Runnable { @Override public void run() { overlay.setVisibility(View.GONE); } } @Override public void OnAlphaChanged(String s, int index) { if (s != null && s.trim().length() > 0) { overlay.setText(s); overlay.setVisibility(View.VISIBLE); handler.removeCallbacks(overlayThread); handler.postDelayed(overlayThread, 700); if (alphaIndexer.get(s) != null) { int position = alphaIndexer.get(s); listView.setSelection(position); } } } private Comparator<School> comparator = new Comparator<School>() { @Override public int compare(School arg0, School arg1) { return Collator.getInstance(Locale.CHINESE).compare( arg0.getSchoolName(), arg1.getSchoolName()); } }; @Override protected void onDestroy() { try { windowManager.removeViewImmediate(overlay); } catch (Exception e) { e.printStackTrace(); } super.onDestroy(); } }