已经很久没更新博客了,主要是最近太忙了,现在app终于发布了,这也使小编有了一点时间把前一段时间,遇到的问题总结一下,记录下来,以便日后查看,也希望能帮到有需要的道友!话不多说,进入正题 :TreeView---利用RecyclerView打造高性能树形控件
TreeView顾名思义就是树状界面,刚开始看到这种界面的时候,觉得通过RecyclerView的嵌套完全可以实现,只不过自己增加一些判断而已,后来随着树状节点的增加,就发现再用RecycleView嵌套工作量就会非常巨大而且效果不佳。TreeView是Girhub上一位大神提供的一种通过自定义RecyclerView实现的可以多级嵌套的树状结构,这里提供源码地址:https://github.com/shineM/TreeView。
先看下效果:
实现步骤:
1,下载TreeView代码
2,将下载的TreeView中treeview_lib中的代码拷贝到自己的demo中(或者添加依赖,我是直接拷贝了需要的额demo)
3,添加RecyclerView依赖,这个是TreeView需要用的;
4,上述工作完成后,就可以开始写代码了:
a.先看主页面的Xml,非常简单,就一个ViewGroup:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.mytreemode.MainActivity"> <LinearLayout android:id="@+id/myView_first" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> </LinearLayout>b.MainActivity中代码:
public class MainActivity extends AppCompatActivity { private LinearLayout myfirstViwe; private List<String> list1 = new ArrayList<>(); private FirstNameView fistNameView; private TreeNode rootNode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list1.add("西游记"); list1.add("三国演义"); list1.add("水浒传"); list1.add("红楼梦"); list1.add("金瓶梅"); list1.add("山海经"); init(); } private void init() { myfirstViwe = (LinearLayout) findViewById(R.id.myView_first); fistNameView = new FirstNameView(); loadData(); TreeView treeView = new TreeView(rootNode,this,new FirstItemViewFactory()); View view = treeView.getView(); view.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); myfirstViwe.addView(view); //