Android 完全符合规则但很头疼的Json映射成一个树结构且可折叠的列表?

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

完整开源地址:https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF

“next”:[

{

“id”:“10011”,

“title”:“编号1-1”

},

{

“id”:“10012”,

“title”:“编号1-2”,

“next”:[

{

“id”:“100121”,

“title”:“编号1-2-1”,

“next”:[

{

“id”:“1001211”,

“title”:“编号1-2-1-1”

},

{

“id”:“1001212”,

“title”:“编号1-2-1-2”

},

{

“id”:“1001213”,

“title”:“编号1-2-1-3”

},

{

“id”:“1001214”,

“title”:“编号1-2-1-4”

},

{

“id”:“1001215”,

“title”:“编号1-2-1-5”

}

]

},

{

“id”:“100122”,

“title”:“编号1-2-2”

},

{

“id”:“100123”,

“title”:“编号1-2-3”,

“next”:[

{

“id”:“1001231”,

“title”:“编号1-2-3-1”

},

{

“id”:“1001232”,

“title”:“编号1-2-3-2”

},

{

“id”:“1001233”,

“title”:“编号1-2-3-3”

},

{

“id”:“1001234”,

“title”:“编号1-2-3-4”

},

{

“id”:“1001235”,

“title”:“编号1-2-3-5”

}

]

}

]

},

{

“id”:“10013”,

“title”:“编号1-3”

}

]

},

{

“id”:“1002”,

“title”:“编号2”

},

{

“id”:“1003”,

“title”:“编号3”

},

{

“id”:“1004”,

“title”:“编号4”,

“next”:[

{

“id”:“10041”,

“title”:“编号4-1”

},

{

“id”:“10042”,

“title”:“编号4-2”

}

]

},

{

“id”:“1005”,

“title”:“编号5”

}

]

}

拿到这一串不确定层级的Json该想什么?用什么去解析?该用什么控件?


逐层addView方式

其实可以直接使用Gson解析,不过这个实体类要自己手写一下:

package com.example.myapplication;

import java.util.List;

public class DataBean {

private String code;

private String message;

private List data;

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public List getData() {

return data;

}

public void setData(List data) {

this.data = data;

}

public static class Data {

private String id;

private String title;

private List next;//重点在这里

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public List getNext() {

return next;

}

public void setNext(List next) {

this.next = next;

}

}

}


( OpenParam.json为那个json字符串 )

使用Gson解析:

Kotlin:

val dataBean = Gson().fromJson(OpenParam.json, DataBean().javaClass)

Java:

DataBean dataBean = new Gson().fromJson(OpenParam.json, DataBean.class)


既然解析出来了,之后可以通过递归来逐渐addView()的方式实现,判断next字段是否为null即可!但要在递归开始之前,先要分析一下布局!

既然要逐级嵌套,先来一个LinearLayout,当然这个列表是可滑动的,外层嵌套一个ScrollView即可,Activity布局那就是这样的:

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout 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”

tools:context=“.MainActivity”>

<ScrollView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

tools:ignore=“MissingConstraints”>

<LinearLayout

android:id=“@+id/treeLayout”

android:layout_width=“match_parent”

android:orientation=“vertical”

android:layout_height=“wrap_content”>

</androidx.constraintlayout.widget.ConstraintLayout>


之后要分析每一个条目,有两种情况,一种是带子布局的item,一种是不带子布局的item,当遇到有嵌套的情况,即存在next字段,就可以使用带子布局的item,反之则是另一个!那么这两种布局就是如下:

带子布局的:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值