RecyclerView实现表格样式,而自定义的一个LayoutManager。用LayoutManager实现表格,与平时用HorizontalScrollView嵌套RecyclerView来实现表格的区别就是:
3、LayoutManager实现表格,每一格的控件都会复用。而我们知道用HorizontalScrollView嵌套RecyclerView时,只有垂直滑动,每一行会进行复用,而水平滑动没有复用一说,因为水平滑动滑的是HorizontalScrollView。
4、LayoutManager实现表格,使用有一个前提,就是你的这个表格必须每一格的宽高要一样。如果你的表格不是每一格宽高一样,如有一些列要比较宽一点,这类需求的话,你还是要用回以前的嵌套方法来实现;
4、LayoutManager实现表格,现在也可以不同列或不同行根据类型使用不同的布局。但有个限制,不同列使用不同的布局时,每个布局的高度必须一样,这个应该好理解,不同列你表格的宽可以不一样,但作为同一行每个item的高肯定一样,要不你的表格都变瀑布型了。同理不同行多类型的每个item的布局宽必须一样。
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
// android
implementation 'com.github.dnwalter:FormLayoutManager:v4.2'
// 适用androidx,想查看androidx的代码可以切换到masterX分支
implementation 'com.github.dnwalter:FormLayoutManager:v4.2x'
}
FormLayoutManager layoutManager = new FormLayoutManager(8);
mRecyclerView.setLayoutManager(layoutManager);
public class MonsterHAdapter extends BaseHFormAdapter<Monster> {
// 3.0之前的版本写法
@Override
protected String[] getRowDatas(Monster model) {
return new String[]{model.getName(), model.getAttribute(), model.getLv(), model.getAtk(),
model.getDef(), model.getRace(), model.getType1(), model.getType2()};
}
// 3.0以及3.0以后的写法
@Override
protected String getRowData(Monster model, int index) {
String result = "";
switch (index) {
case 0:
result = model.getName();
break;
case 1:
result = model.getAttribute();
break;
……
}
return result;
}
@Override
public int getColumnCount() {
return 8;
}
}