对Android TreeView 的实现,目录结构的实现

来源:互联网 发布:天刀侠女捏脸数据 编辑:程序博客网 时间:2024/05/21 09:32

在安卓开发中,或多或少的会用到目录结构,也就是tree的实现,下面是实现的步骤。

1.首先应该导入包的依赖。

compile 'com.github.bmelnychuk:atv:1.2.+'

2.第二步对树型结构进行布局,我自己设置的是一个图片后有一段文字。

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:paddingBottom="5dp"    android:paddingLeft="5dp"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginRight="5dp"/>    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

3.然后再代码中对tree结构进行定义,我这里的isSub是判断其是否为子节点。

class IconTreeItem {        public boolean isSub;        public int icon;        public String text;    }

4.要使用树,要先对给树定义一个Holder,将tree结构放到Holder中,在createNodeView中对布局文件进行引入和数据进行适配。

class MyHolder extends TreeNode.BaseNodeViewHolder<IconTreeItem> {        public MyHolder(Context context){            super(context);        }        @Override        public View createNodeView(TreeNode node, IconTreeItem value) {            final LayoutInflater inflater = LayoutInflater.from(context);            final View view = inflater.inflate(R.layout.tree_item, null, false);            if (value.isSub){                view.setPadding(50,20,10,20);            }            TextView tvValue = (TextView) view.findViewById(R.id.textView);            ImageView ivValue=(ImageView)view.findViewById(R.id.img) ;            tvValue.setText(value.text);            ivValue.setImageResource(value.icon);            return view;        }    }

5.对tree进行初始化,我这里是两级目录分别用两个List来接收数据和将数据放入树中。

private void initTree() {        List<Category1> list1= this.category.getResult();        TreeNode root = TreeNode.root();        for (Category1 c1:list1){            String name=c1.getName();            IconTreeItem nodeItem = new IconTreeItem();            nodeItem.icon=R.drawable.timg_meitu_4;            nodeItem.text=name;            nodeItem.isSub=false;            TreeNode parent = new TreeNode(nodeItem).setViewHolder(new MyHolder(getActivity()));            List<Category2> list2=c1.getList();            for (final Category2 c2:list2){                String SubName=c2.getName();                IconTreeItem nodeItem2 = new IconTreeItem();                nodeItem2.icon=R.drawable.timg_meitu_5;                nodeItem2.text=SubName;                nodeItem2.isSub=true;                TreeNode child = new TreeNode(nodeItem2).setViewHolder(new MyHolder(getActivity()));                child.setClickListener(new TreeNode.TreeNodeClickListener() {                    @Override                    public void onClick(TreeNode node, Object value) {                        String id=c2.getId();                        cookBookPresenter.getCookBookById(getActivity(),id);                        pb.setVisibility(View.VISIBLE);                    }                });                parent.addChild(child);            }            root.addChild(parent);        }        AndroidTreeView tView = new AndroidTreeView(getActivity(), root);        treecontainer.addView(tView.getView());    }

首先获取到数据,然后定义一个树的根节点root,然后将数据解析,对list1其中的每一项对其数据进行设置,然后 定义一个父节点parent,将数据放到这个节点中,对这个TreeNode设置一个持有类Holder,然后再对list1进行解析,再对list2其中的每一项对其数据进行设置,然后 定义一个子节点child,将数据放到这个节点中,对这个TreeNode设置一个持有类Holder,最后将这个子结点child加入到parent节点中,对子节点解析完后,再将parent结点加到root结点中,最后创建一个
AndroidTreeView tView = new AndroidTreeView(getActivity(), root);
将创建好的树root给它添加一个AndroidTreeView ,之后再

treecontainer.addView(tView.getView());

将这个view给自己定义的一个view,,我这里是一个LinnerLayout,将这个树放到线性布局中,这样就彻底完成了。

原创粉丝点击