写在前面:
最近发现一个很酷的开源项目,正好自己也打算写一个TableView,但是。。。写代码哪有抄代码爽!所以我决定来学习一下大佬的代码(先贴出来Github地址---->TableView)
学习第一步,先看基本架构图:
按照图上的解释,TableView的实现方式是多个RecyclerView组合的结果,多个RecyclerView在TableView的统一架构下实现数据联动、滑动联动。至于为什么选择使用多个RecyclerView来实现的,原作者给出的理由是RecyclerView自带资源回收机制,并且非常高效,直接使用可以节省非常大的开发成本。
第二步:clone项目到本地
我将代码从github上克隆到本地,开始运行并分析源码。
这是运行效果:
可以看出来它的功能是非常强大的吧,整行、整列、单个选择都OJBK,而且全部支持自定义样式。。。
首先是从MainActivity开始看吧:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.add(
R.id.activity_container
, new MainFragment()
, MainFragment.class.getSimpleName()
).commit();
}
}
}
从代码上看就是这样的非常简单,在activity中使用了一个Fragment,接下来看MainFragment中干了什么:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle
savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_main, container, false);
//。。。省略了部分代码。。。
//获取到TableView
mTableView = layout.findViewById(R.id.tableview);
initializeTable