Android开发之国家列表分组排序显示

先看看效果, 这是一个国家的区号数据, 进行分组显示, 服务端下载的是乱序的区号数据

引入依赖

洪洋的万能 adapter

implementation 'com.zhy:base-rvadapter:3.0.3'
implementation 'com.github.promeg:tinypinyin:2.0.3'

处理数据

服务端返回的数据格式

{
    "code": "+93",
    "name": "阿富汗",
    "name_en": "Afghanistan"
}, {
    "code": "+355",
    "name": "阿尔巴尼亚",
    "name_en": "Albania"
}

然后bean

data class CodeResp(
        @SerializedName("total") var total: Int = 0,
        @SerializedName("items") var items: List<CodeItem> = listOf()
)

data class CodeItem(
        @SerializedName("code") var code: String = "",
        @SerializedName("name") var name: String = "",
        @SerializedName("name_en") var nameEn: String = ""
) : BaseBean()

下面就是排序了

val ob = object : BaseObserver<HttpResult<CodeResp>>(this) {
            override fun _onNext(t: HttpResult<CodeResp>) {
                t.data?.let {
                    datas.clear()
                    //处理分组数据
                    val map = hashMapOf<String, ArrayList<CodeItem>>()
                    it.items.forEachIndexed { _, codeItem ->
                        //名称转拼音, 并获取首字母, 并且放到map里面
                        val char = Pinyin.toPinyin(codeItem.name, "").substring(0, 1)
                        if (!map.containsKey(char)) {
                            map[char] = arrayListOf(codeItem)
                        } else {
                            map[char]!!.add(codeItem)
                        }
                    }
                    //对map的key进行排序
                    val sortKeys = map.keys.sorted()
                    //遍历排序后的数组, 分别从map中获取list
                    sortKeys.forEach {
                        datas.add(TitleBean(it))
                        datas.addAll(map[it]!!)
                    }

                    list.adapter.notifyDataSetChanged()
                    val defaultCode = getCurrentCountryCode()
                    datas.forEachIndexed { index, baseBean ->
                        if (baseBean is CodeItem && baseBean.code == defaultCode){
                            list.scrollToPosition(index)
                        }
                    }
                }
            }

            override fun onSubscribe(d: Disposable) {
                super.onSubscribe(d)
                d.addTo(compositeDisposable)
                show(getString(R.string.get_data_from_server))
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值