本帖最后由 hnxzl2008 于 2010-10-18 16:35:18 编辑

解决方案 »

  1. 树形结构的实现,可以自己画,也可以用现有的控件组装出来(从节点开始组装,然后扩展到整棵树),视具体情况而定,要是有人有空写个treeView的开源出来就好了
      

  2. 我也实现了一个TreeView,但就是不知该怎么打包, 因为TreeView用到了layout、drawable资源, 这些资源就算加到jar中也使用不了
      

  3. 不同的人设计的TreeView, 接口会完全不同哈.....我的 TreeView 继承自 ScrollView这样添加到布局文件中:
    <cn.yishou.treeview.TreeView 
        android:id="@+id/tree1" android:layout_width="match_parent" android:layout_height="wrap_content"/>
    调用这个方法就能把树数据结构显示到界面上了:
    void TreeView.Bind(int layoutId, Object rootNode, boolean allowCheckedParent, boolean isRelated, INodeDataAnalyser nodeDataAnalyser, OnBindingListener bindListener)
    其中:
    layoutId 布局Id 需要一个布局文件的Id,它将作为一个节点的内容布局
    rootNode 根节点 你的树数据结构的根节点,此节点的所有子节点将显示到界面中,但不包括根节点本身
    allowCheckedParent 是否允许选择父节点
    isRelated 子父节点的选择是否关联的 就是点一下父节点所有子节点都会选中之类的
    nodeDataAnalyser 节点数据分析器 不能为null,用于读取你的节点要显示的文本和子节点
    bindListener 绑定事件 当把一个节点显示到界面上时,会触发此事件节点布局文件的要求:
    如果布局文件中包含有ID为@android:id/checkbox的控件,那么这个控件必须是RadioButton或CheckBox。TreeView将会自动维护选择框的状态。
    如果布局文件中包含有ID为@android:id/text1的控件,那么这个控件必须是TextView。TreeView将会自动把节点的文本设置到这个TextView。并且当点击这个TextView时,将会展开/折叠子节点。取得选择中的节点:前提是节点布局文件中包含有ID为@android:id/checkbox的控件
    TreeView.GetCheckedNode() RadioButton专用的方法
    TreeView.GetCheckedNodes() 只要是打勾了,其对应的节点就会被返回
    TreeView.GetCheckedNodesWithLastLevel() 只返回最末级并且打了勾的节点
    TreeView.GetCheckedNodesWithLeast() 如果父节点打了勾,那么只返回父节点,其子节点将忽略其他:
    TreeView.root 内部使用的树根节点;TreeView.Node.value保存了你的节点对象
    TreeView.dicNode 把节点布局的父对像作为Key的话,可以取得对应的内部使用的树节点
    TreeView.padding 设置每级的缩进量
    TreeView.selectedNodeBackgroundColor 节点点击时的背景色
    TreeView.triggerOnClickListener 一个已实现的OnClickListener,点击后能展开/折叠子节点内部使用到的资源:
    treeview_node_container.xml
    treeview_collapse.png
    treeview_expand.png
    treeview_none.png
      

  4. 个人认为 ExpandableListActivity 在手机上的体验应该比treeview好
      

  5. ExpandableListView就是你说的Treeview
      

  6. ExpandableListView 是不是只支持两级节点?
      

类似问题 »