解决方案 »

  1.   

    像类似这样的全国城市,可以在APP启动就记载好记录在全局的对象中,其他窗口要用直接使用不用加载
      

  2.   

    不要在主线程加载 , 在 onCreate()方法 里面 开启一个加载线程, 慢慢加载, 页面弄个进度条之类的东西, 先跳过来 , 在子线程里面慢慢加载, 这样用户体验更好一些;注意 要在 onStop()方法中终止线程, 要不然 还没加载完  退出去 线程还在跑就哭了
      

  3.   

    就是全局类全部是静态属性随便在哪个窗口可以直接访问类似public static string city;
      

  4.   

    class AddressLoadTask extends AsyncTask<String, Void, List>{ @Override
    protected List doInBackground(String... params) {

    arrayCitys = AddressActivity.this.getResources()
    .getStringArray(R.array.citys);
    for (int i = 0; i < 50; i++) {
    CityEntity city = new CityEntity();
    city.setCityName(arrayCitys[i]);
    // 获取每个城市首字
    String letter = util.getLetters(arrayCitys[i]);
    city.setLetter(letter);
    sourceList.add(city);
    }
    return sourceList;
    }
    @Override
    protected void onPostExecute(List result) {
    if(result==null){
    return ;
    }
    Collections.sort(sourceList, comparator);
    adapter.notifyDataSetChanged();
    super.onPostExecute(result);
    }
    }
      

  5.   

    Adapter  代码
    public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) {
    viewHolder = new ViewHolder();
    convertView = LayoutInflater.from(mContext).inflate(
    R.layout.layout_address_list_item, null);
    viewHolder.setName((TextView) convertView
    .findViewById(R.id.tv_address_list_item_city));
    viewHolder.setLetter((TextView) convertView
    .findViewById(R.id.tv_address_list_item_letter));
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    } // 根据position获取分类的首字母的Char ascii值
    int section = getSectionForPosition(position); // 如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现
    if (position == getPositionForSection(section)) {
    viewHolder.letter.setVisibility(View.VISIBLE);
    viewHolder.letter.setText(mCityList.get(position).getLetter());
    } else {
    viewHolder.letter.setVisibility(View.GONE);
    } viewHolder.name.setText(mCityList.get(position).getCityName());
    return convertView;
    } /**
     * 根据ListView的当前位置获取分类的首字母的Char ascii值
     */
    public int getSectionForPosition(int position) {
    return mCityList.get(position).getLetter().charAt(0);
    }
    /**
     * 根据分类的首字母的Char ascii值获取其第一次出现该首字母的位置
     */
    public int getPositionForSection(int section) {
    for (int i = 0; i < getCount(); i++) {
    String sortStr = mCityList.get(i).getLetter();
    char firstChar = sortStr.toUpperCase().charAt(0);
    if (firstChar == section) {

    return i;
    }
    } return -1;
    }