RecyclerView适配器请移步我的另一个仓库TreeNodeLibrary
普通列表:ListView适配器包含四个重写方法。其中,getCount指列表长度或,getView指item的布局和显示,一般列表写好这两个就ok。
多级列表:数据对象一般是大数据集合,大数据包含小数据集合,小数据包含小小数据集合··· 一般情况的处理方式有这几种:
(缺点:此方法每次滑动都要重新加载布局,影响性能,且只适用于3级列表,越多级越难写。)
(缺点:二级列表嵌套列表,增加了数据处理难度,适配器难设置,二级列表设置易出问题,且只适用于3级列表)
(优点:可适用于多级列表,适配器易于维护,数据结构清晰。缺点:数据结构需要指定类型,如:父类id,自己id。)网上有封装好的库,比较好用,数据结构合适的推荐使用。
(优点:数据无需处理,操作简单。缺点:计算复杂)本文强烈推荐使用,已经封装,可直接使用。
1和2都差不多,不好用。3和4高大上,3需要满足树节点:有父类id和自己id,4需要满足嵌套,比较通用(一般数据都是嵌套,除非后台够叼,已经帮你算好)
简单的三级列表,无差别,推进使用4方法,操作简单。树节点模式使用3方法。嵌套结构使用4方法。
担心算错?不用怕,已经算好了并封装。本文详细介绍4方法及使用。
下载压缩包解压到本地,导入开发工具
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.JianxunMaster:MultiLevelLibrary:version'
}
v1.0.0版还没有RecyclerView的适配
public class ClassA extends MultiLevelModel
public class MultiLevelTestAdapter extends MultiLevelAdapter
adapter = new MultiLevelTestAdapter(this, true, false
, 1);
adapter.setOnMultiLevelListener(new MultiLevelAdapter.OnMultiLevelListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id
, MultiLevelModel current, MultiLevelModel max) {
Toast.makeText(MainActivity.this, "position = " + position + "" +
" , current level = " + current.getLevel() + " , outside level = "
+ max.getLevel()
, Toast.LENGTH_SHORT).show();
}
});
listView.setOnItemClickListener(adapter);
listView.setAdapter(adapter);
adapter.setList(list);
public class Model extends MultiLevelModel<子集泛型>{
@JSONField(name = "json字段名")
@Override
public void setChildren(List<子集泛型> children) {
super.setChildren(children);
}
}
for (int i = 0; i < 3; i++) {
ClassA classA = new ClassA(i, " A" + i);
classA.setChildren(new ArrayList());
list.add(classA);
count += 1;
for (int j = 0; j < 3; j++) {
ClassB classB = new ClassB(j, " A" + i + " B" + j);
classA.getChildren().add(classB);
count += 1;
for (int k = 0; k < 3; k++) {
ClassC classC = new ClassC(" A" + i + " B" + j + " C" + k);
classB.getChildren().add(classC);
count += 1;
for (int l = 0; l < 3; l++) {
ClassD classD = new ClassD(" A" + i + " B" + j + " C" + k + " D" + l
, "D");
classC.getChildren().add(classD);
count += 1;
}
}
}
}