android通讯录根据首字母分组(一)

本文介绍如何在Android应用中动态地为布局添加字母索引,并通过阿里巴巴的fastJson库解析JSON数据,同时利用pinyin4J包处理中文字符以实现数据的有效分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上几张效果图,装装比
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
开始代码了,第一步
写好布局XML文件,在MainActivity中定义一个索引数组,然后在代码中给最右侧竖直方向的LinearLayout动态的添加一个个TextView,TextView里面写上对应的索引值。

/** 字母索引表 */
    public String[] Index = { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P", "Q", "U", "V", "W", "X", "Y","Z" };
//在代码里添加ABCDEFG.....到右边的布局中
    private void addIndexView() {
        for (int i = 0; i < Index.length; i++) {
            TextView textView = new TextView(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT);

            textView.setLayoutParams(params);
            textView.setText(Index[i]);
            textView.setTextSize(16);
            textView.setGravity(Gravity.CENTER_HORIZONTAL);
            indexPanel.addView(textView);
        }
    }

第二步
党的领导人数据是不能随便暴露的,所以这里只有自己模拟一个数据Json数据了,,需要使用阿里巴巴的fastJson去解析数据。模拟的数据结构存在HeroJson类中,大致如下图:
这里写图片描述
由于数据有点多,我在解析的时候开了一个线程,用handler去操作数据。解析完后,发送一个消息给handler,在handler里面给listView设置一个adapter.

//解析json
    private void resolveJson(final String value) {
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                JSONObject object = JSON.parseObject(value);
                jsonArray = object.getJSONArray("DATA");
                dataList = new JSONArray();
                dataList.addAll(jsonArray);
                setSZM(dataList);
                handler.sendEmptyMessage(2);
            }
        });
        thread.start();
    };
private Handler handler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 1) {
                String value = msg.obj.toString();
                Log.i("西门大JJ", value);
                resolveJson(value);
            } else {
                adapter = new MyAdapter(dataList,lc,MainActivity.this);
                totalUser.setText("共"+dataList.size()+"人");
                lv.setAdapter(adapter);
            }
        }
    };

解析json的时候有很重要的一步,给json中的每个object添加数据,就是
setSZM(dataList);这个方法。使用这个方法需要用到pinyin4J包,使用这个包得到每个英雄人物的首字母,全拼等,,用来判断我们每个item的位置。

/**
     * 创建获取汉字首字母,并添加到JsonArray里面去
     * 
     * @param datalist
     */
    private void setSZM(JSONArray datalist) {
        for (int i = 0; i < datalist.size(); i++) {
            JSONObject o = datalist.getJSONObject(i);
            String name_cn = o.getString("CN");

            //String quanPin = Pinyin4j.toPinYin(hanzi);
            String quanPin = getPinYin(name_cn);
            // 获取汉字首字母
            String szm = Pinyin4j.getSZM(name_cn).toUpperCase();
            String firstZM = String.valueOf(szm.charAt(0)).toUpperCase();
            // 添加进去
            o.put("firstZM", firstZM);
            o.put("SZM", szm);
            o.put("quanPin", quanPin);

        }
    }

哎,等等,打盘游戏去回来再写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值