Android 城市列表ListView 之 按首字母分组

首先准备两个Array:一个是城市TAg,另一个是城市Name

  1. <string-array name="city_group_list">  
  2.         <item>热门</item>  
  3.         <item>热门</item>  
  4.         <item>热门</item>  
  5.         <item>热门</item>  
  6.         <item>热门</item>  
  7.         <item>热门</item>  
  8.         <item>热门</item>  
  9.         <item>热门</item>  
  10.         <item>热门</item>  
  11.         <item>热门</item>  
  12.         <item>热门</item>  
  13.         <item>热门</item>  
  14.         <item>热门</item>  
  15.         <item>热门</item>  
  16.         <item>热门</item>  
  17.         <item>热门</item>  
  18.         <item>热门</item>  
  19.         <item>热门</item>  
  20.         <item>热门</item>  
  21.         <item>A</item>  
  22.         <item>A</item>  
  23.         <item>A</item>  
  24.         <item>A</item>  
  25.         <item>A</item>  
  26.         <item>B</item>  
  27.         <item>B</item>  
  28.         <item>B</item>  
  29.         <item>B</item>  
  30.         <item>B</item>  
  31.         <item>B</item>  
  32.         <item>C</item>  
  33.         <item>C</item>  
  34.         <item>C</item>  
  35.         <item>C</item>  
  36.         <item>C</item>  
  37.         <item>C</item>  
  38.         <item>C</item>  
  39.         <item>C</item>  
  40.         <item>C</item>  
  41.         <item>D</item>  
  42.         <item>D</item>  
  43.         <item>D</item>  
  44.         <item>D</item>  
  45.         <item>D</item>  
  46.         <item>D</item>  
  47.         <item>D</item>  
  48.         <item>E</item>  
  49.         <item>F</item>  
  50.         <item>F</item>  
  51.         <item>F</item>  
  52.         <item>G</item>  
  53.         <item>G</item>  
  54.         <item>G</item>  
  55.         <item>G</item>  
  56.         <item>G</item>  
  57.         <item>G</item>  
  58.         <item>H</item>  
  59.         <item>H</item>  
  60.         <item>H</item>  
  61.         <item>H</item>  
  62.         <item>H</item>  
  63.         <item>H</item>  
  64.         <item>H</item>  
  65.         <item>H</item>  
  66.         <item>H</item>  
  67.         <item>H</item>  
  68.         <item>H</item>  
  69.         <item>H</item>  
  70.         <item>H</item>  
  71.         <item>J</item>  
  72.         <item>J</item>  
  73.         <item>J</item>  
  74.         <item>J</item>  
  75.         <item>J</item>  
  76.         <item>J</item>  
  77.         <item>J</item>  
  78.         <item>J</item>  
  79.         <item>J</item>  
  80.         <item>J</item>  
  81.         <item>J</item>  
  82.         <item>J</item>  
  83.         <item>J</item>  
  84.         <item>K</item>  
  85.         <item>K</item>  
  86.         <item>K</item>  
  87.         <item>K</item>  
  88.         <item>K</item>  
  89.         <item>L</item>  
  90.         <item>L</item>  
  91.         <item>L</item>  
  92.         <item>L</item>  
  93.         <item>L</item>  
  94.         <item>L</item>  
  95.         <item>L</item>  
  96.         <item>L</item>  
  97.         <item>M</item>  
  98.         <item>M</item>  
  99.         <item>M</item>  
  100.         <item>M</item>  
  101.         <item>M</item>  
  102.         <item>N</item>  
  103.         <item>N</item>  
  104.         <item>N</item>  
  105.         <item>N</item>  
  106.         <item>N</item>  
  107.         <item>N</item>  
  108.         <item>N</item>  
  109.         <item>Q</item>  
  110.         <item>Q</item>  
  111.         <item>Q</item>  
  112.         <item>Q</item>  
  113.         <item>Q</item>  
  114.         <item>Q</item>  
  115.         <item>Q</item>  
  116.         <item>S</item>  
  117.         <item>S</item>  
  118.         <item>S</item>  
  119.         <item>S</item>  
  120.         <item>S</item>  
  121.         <item>S</item>  
  122.         <item>S</item>  
  123.         <item>S</item>  
  124.         <item>S</item>  
  125.         <item>S</item>  
  126.         <item>T</item>  
  127.         <item>T</item>  
  128.         <item>T</item>  
  129.         <item>T</item>  
  130.         <item>T</item>  
  131.         <item>T</item>  
  132.         <item>W</item>  
  133.         <item>W</item>  
  134.         <item>W</item>  
  135.         <item>W</item>  
  136.         <item>W</item>  
  137.         <item>W</item>  
  138.         <item>W</item>  
  139.         <item>W</item>  
  140.         <item>W</item>  
  141.         <item>W</item>  
  142.         <item>W</item>  
  143.         <item>X</item>  
  144.         <item>X</item>  
  145.         <item>X</item>  
  146.         <item>X</item>  
  147.         <item>X</item>  
  148.         <item>X</item>  
  149.         <item>X</item>  
  150.         <item>Y</item>  
  151.         <item>Y</item>  
  152.         <item>Y</item>  
  153.         <item>Y</item>  
  154.         <item>Y</item>  
  155.         <item>Y</item>  
  156.         <item>Y</item>  
  157.         <item>Y</item>  
  158.         <item>Y</item>  
  159.         <item>Y</item>  
  160.         <item>Y</item>  
  161.         <item>Z</item>  
  162.         <item>Z</item>  
  163.         <item>Z</item>  
  164.         <item>Z</item>  
  165.         <item>Z</item>  
  166.         <item>Z</item>  
  167.         <item>Z</item>  
  168.         <item>Z</item>  
  169.         <item>Z</item>  
  170.     </string-array>  
  1. <string-array name="city_description_list">  
  2.     <item>北京首都</item>  
  3.     <item>上海虹桥</item>  
  4.     <item>上海浦东</item>  
  5.     <item>广州</item>  
  6.     <item>深圳</item>  
  7.     <item>香港</item>  
  8.     <item>澳门</item>  
  9.     <item>天津</item>  
  10.     <item>成都</item>  
  11.     <item>重庆</item>  
  12.     <item>南京</item>  
  13.     <item>青岛</item>  
  14.     <item>珠海</item>  
  15.     <item>福州</item>  
  16.     <item>哈尔滨</item>  
  17.     <item>大连</item>  
  18.     <item>海口</item>  
  19.     <item>沈阳</item>  
  20.     <item>厦门</item>  
  21.     <item>安庆</item>  
  22.     <item>鞍山</item>  
  23.     <item>阿克苏</item>  
  24.     <item>阿勒泰</item>  
  25.     <item>安康</item>  
  26.     <item>北京首都</item>  
  27.     <item>北京南苑</item>  
  28.     <item>保山</item>  
  29.     <item>包头</item>  
  30.     <item>北海</item>  
  31.     <item>蚌埠</item>  
  32.     <item>重庆</item>  
  33.     <item>成都</item>  
  34.     <item>长沙</item>  
  35.     <item>长春</item>  
  36.     <item>常德</item>  
  37.     <item>长治</item>  
  38.     <item>常州</item>  
  39.     <item>朝阳</item>  
  40.     <item>赤峰</item>  
  41.     <item>大连</item>  
  42.     <item>敦煌</item>  
  43.     <item>大理</item>  
  44.     <item>达县</item>  
  45.     <item>东营</item>  
  46.     <item>丹东</item>  
  47.     <item>大同</item>  
  48.     <item>恩施</item>  
  49.     <item>福州</item>  
  50.     <item>阜阳</item>  
  51.     <item>富蕴</item>  
  52.     <item>广州</item>  
  53.     <item>桂林</item>  
  54.     <item>贵阳</item>  
  55.     <item>格尔木</item>  
  56.     <item>广汉</item>  
  57.     <item>赣州</item>  
  58.     <item>海口</item>  
  59.     <item>哈尔滨</item>  
  60.     <item>杭州</item>  
  61.     <item>合肥</item>  
  62.     <item>黄山</item>  
  63.     <item>呼和浩特</item>  
  64.     <item>海拉尔</item>  
  65.     <item>哈密</item>  
  66.     <item>汉中</item>  
  67.     <item>黑河</item>  
  68.     <item>衡阳</item>  
  69.     <item>和田</item>  
  70.     <item>黄岩</item>  
  71.     <item>吉林</item>  
  72.     <item>济南</item>  
  73.     <item>九江</item>  
  74.     <item>九寨黄龙</item>  
  75.     <item>吉安</item>  
  76.     <item>佳木斯</item>  
  77.     <item>嘉峪关</item>  
  78.     <item>济宁</item>  
  79.     <item>景德镇</item>  
  80.     <item>景洪</item>  
  81.     <item>晋江</item>  
  82.     <item>锦州</item>  
  83.     <item>酒泉</item>  
  84.     <item>昆明</item>  
  85.     <item>克拉玛依</item>  
  86.     <item>喀什</item>  
  87.     <item>库尔勒</item>  
  88.     <item>库车</item>  
  89.     <item>洛阳</item>  
  90.     <item>兰州</item>  
  91.     <item>拉萨</item>  
  92.     <item>连云港</item>  
  93.     <item>丽江</item>  
  94.     <item>临沂</item>  
  95.     <item>柳州</item>  
  96.     <item>泸州</item>  
  97.     <item>芒市</item>  
  98.     <item>梅县</item>  
  99.     <item>绵阳</item>  
  100.     <item>牡丹江</item>  
  101.     <item>满洲里</item>  
  102.     <item>南京</item>  
  103.     <item>宁波</item>  
  104.     <item>南昌</item>  
  105.     <item>南宁</item>  
  106.     <item>南通</item>  
  107.     <item>南充</item>  
  108.     <item>南阳</item>  
  109.     <item>青岛</item>  
  110.     <item>秦皇岛</item>  
  111.     <item>齐齐哈尔</item>  
  112.     <item>泉州</item>  
  113.     <item>衢州</item>  
  114.     <item>且末</item>  
  115.     <item>庆阳</item>  
  116.     <item>沈阳</item>  
  117.     <item>深圳</item>  
  118.     <item>上海虹桥</item>  
  119.     <item>上海浦东</item>  
  120.     <item>汕头</item>  
  121.     <item>石家庄</item>  
  122.     <item>苏州</item>  
  123.     <item>三亚</item>  
  124.     <item>沙市</item>  
  125.     <item>思茅</item>  
  126.     <item>天津</item>  
  127.     <item>塔城</item>  
  128.     <item>太原</item>  
  129.     <item>通化</item>  
  130.     <item>通辽</item>  
  131.     <item>铜仁</item>  
  132.     <item>温州</item>  
  133.     <item>武汉</item>  
  134.     <item>武汉王家</item>  
  135.     <item>无锡</item>  
  136.     <item>乌鲁木齐</item>  
  137.     <item>威海</item>  
  138.     <item>梧州</item>  
  139.     <item>万县</item>  
  140.     <item>潍坊</item>  
  141.     <item>乌兰浩特</item>  
  142.     <item>武夷山</item>  
  143.     <item>厦门</item>  
  144.     <item>徐州</item>  
  145.     <item>西安</item>  
  146.     <item>西宁</item>  
  147.     <item>西昌</item>  
  148.     <item>襄樊</item>  
  149.     <item>锡林浩特</item>  
  150.     <item>银川</item>  
  151.     <item>延安</item>  
  152.     <item>延吉</item>  
  153.     <item>烟台</item>  
  154.     <item>盐城</item>  
  155.     <item>宜宾</item>  
  156.     <item>宜昌</item>  
  157.     <item>伊宁</item>  
  158.     <item>义乌</item>  
  159.     <item>永州</item>  
  160.     <item>榆林</item>  
  161.     <item>珠海</item>  
  162.     <item>昭通</item>  
  163.     <item>张家界</item>  
  164.     <item>湛江</item>  
  165.     <item>芷江</item>  
  166.     <item>中甸</item>  
  167.     <item>舟山</item>  
  168.     <item>遵义</item>  
  169.     <item>郑州</item>  
  170. </string-array>  

在Activity中声明两个List,然后读取数据到list
  1. import java.util.ArrayList;
    import java.util.List;


    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;


    public class MainActivity extends Activity implements OnItemClickListener {
        private List<String> list = new ArrayList<String>();  
        private List<String> listTag = new ArrayList<String>();
        private String cityTags[];
        private ListView listView1;  
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getData();
            listView1 = (ListView) findViewById(R.id.listView1);
            listView1.setAdapter(new CityListAdapter(MainActivity.this, list, listTag));
            listView1.setOnItemClickListener(this);
            ListView listView2=(ListView)findViewById(R.id.listView2);
            listView2.setAdapter(new MyBaseAdapter(MainActivity.this,cityTags));
            listView2.setOnItemClickListener(this);
        }
        public void getData() {  
            String city_name_list[] = MainActivity.this.getResources()  
                    .getStringArray(R.array.city_description_list);  
            String city_list_tag[] = MainActivity.this.getResources()  
                    .getStringArray(R.array.city_group_list);  
            cityTags = new String[] { "热门", "A", "B", "C", "D", "E", "F", "G", "H", "J",  
                    "K", "L", "M", "N", "Q", "S", "T", "W", "X", "Y", "Z" };  
            int listsize[] = { 0, 19, 5, 6, 9, 7, 1, 3, 6, 13, 13, 5, 8, 5, 7, 7,  
                    10, 6, 11, 7, 11, 9 };  
          
            for (int j = 1; j < listsize.length; j++) {  
                list.add(cityTags[j - 1]);  
                listTag.add(cityTags[j - 1]);  
                listsize[j] = listsize[j - 1] + listsize[j];  
                for (int i = listsize[j - 1]; i < listsize[j]; i++) {  
                    list.add(city_name_list[i]);  
                    // System.out.println(city_list_tag[i]);  
                    listTag.add(city_list_tag[i]);  
                }  
            }  
        }
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            switch (parent.getId()) {
            case R.id.listView1:
                boolean  isLetter=false;
                for(int i=0;i<cityTags.length;i++){
                    if(cityTags[i].equals(listTag.get(position))){
                        isLetter=true;
                        break;
                    }
                }
                if(!isLetter){
                    Toast.makeText(this, listTag.get(position), Toast.LENGTH_SHORT).show();
                    
                }
                
                break;
            case R.id.listView2:
                for(int i=0;i<listTag.size();i++){
                    if(cityTags[position].equals(listTag.get(i))){
                        listView1.setSelection(i);
                        break;
                    }
                }
                break;
            default:
                break;
            }
        }  

       
    }


适配器中这样写:

其中return super.isEnabled(position);设置城市首字母标示不可选

  1. public class CityListAdapter extends ArrayAdapter<String>{  
  2.       
  3.     private List<String> listTag = null;  
  4.     public CityListAdapter(Context context, List<String> objects, List<String> tags) {  
  5.         super(context, 0, objects);  
  6.         this.listTag = tags;  
  7.     }  
  8.        
  9.     @Override  
  10.     public boolean isEnabled(int position) {  
  11.         if(listTag.contains(getItem(position))){  
  12.             return false;  
  13.         }  
  14.         return super.isEnabled(position);  
  15.     }  
  16.     @Override  
  17.     public View getView(int position, View convertView, ViewGroup parent) {  
  18.         View view = convertView;  
  19.         if(listTag.contains(getItem(position))){  
  20.             view = LayoutInflater.from(getContext()).inflate(R.layout.citylist_tag, null);  
  21.         }else{                      
  22.             view = LayoutInflater.from(getContext()).inflate(R.layout.citylist_item, null);  
  23.         }  
  24.         TextView textView = (TextView) view.findViewById(R.id.group_list_item_text);  
  25.         textView.setText(getItem(position));  
  26.         return view;  
  27.     }  
  28. }  

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyBaseAdapter extends BaseAdapter {
    private Context  context;
    private String[] letter;
    
    

       public MyBaseAdapter(Context context, String[] letter) {
        super();
        this.context = context;
        this.letter = letter;
    }

    @Override
       public int getCount() {
           // TODO Auto-generated method stub
           return letter.length;
       }

       @Override
       public Object getItem(int position) {
           // TODO Auto-generated method stub
           return letter[position];
       }

       @Override
       public long getItemId(int position) {
           // TODO Auto-generated method stub
           return position;
       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
           View view=LayoutInflater.from(context).inflate(R.layout.citylist_item, null);
           TextView tv=(TextView)view.findViewById(R.id.group_list_item_text);
           tv.setText(letter[position]);
           return view;
       }

}

xml 布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.yuekaolianxi2.MainActivity" >
  <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:scrollbars="none" >
    </ListView>

    <ListView
        android:id="@+id/listView2"
        android:layout_width="15dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/address_gps"
        android:cacheColorHint="#00000000"
        android:divider="@null"
        android:scrollbars="none" >

    </ListView>

</RelativeLayout>








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值