《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”