经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
android实现菜单三级树效果
来源:jb51  时间:2018/11/22 9:58:59  对本文有异议

本文实例为大家分享了android实现菜单三级树展示的具体代码,供大家参考,具体内容如下

以下是部分代码,完整代码请在最下面点击下载:

【MainActivity】

  1. public void treeOnClick() {
  2. // TODO Auto-generated method stub
  3. superAdapter.RemoveAll();
  4. superAdapter.notifyDataSetChanged();
  5. String MenuCatName = getDate("MenuCatName");
  6. String MenuGroupName = getDate("MenuGroupName");
  7. String MenuItemName = getDate("MenuItemName");
  8. // 一级菜单名数组
  9. parent = MenuCatName.split("/");
  10. // 二级菜单名数组
  11. child = MenuGroupName.split("/");
  12. // 三级菜单名数组
  13. grandchild = MenuItemName.split("/");
  14. List<SuperTreeViewAdapter.SuperTreeNode> superNodeTree = superAdapter
  15. .GetTreeNode();
  16. for (int i = 0; i < parent.length; i++) {
  17. SuperTreeViewAdapter.SuperTreeNode superNode = new SuperTreeViewAdapter.SuperTreeNode();
  18. superNode.parent = parent[i];
  19. for (int j = 0; j < child_grandchild.length; j++) {
  20. TreeViewAdapter.TreeNode node = new TreeViewAdapter.TreeNode();
  21. node.parent = child_grandchild[j][0][0];
  22. for (int k = 0; k < child_grandchild[j][1].length; k++) {
  23. node.childs.add(child_grandchild[j][1][k]);
  24. }
  25. superNode.childs.add(node);
  26. }
  27. superNodeTree.add(superNode);
  28. }
  29. superAdapter.UpdateTreeNode(superNodeTree);
  30. expandableListView.setAdapter(superAdapter);
  31. }

【SuperTreeViewAdapter】

  1. public ExpandableListView getExpandableListView() {
  2. AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
  3. ViewGroup.LayoutParams.FILL_PARENT, TreeViewAdapter.ItemHeight);
  4. ExpandableListView superTreeView = new ExpandableListView(parentContext);
  5. superTreeView.setLayoutParams(lp);
  6. // 去掉子菜单分割线
  7. superTreeView.setDivider(null);
  8. return superTreeView;
  9. }
  10. /**
  11. * 三层树结构中的第二层是一个ExpandableListView
  12. */
  13. public View getChildView(int groupPosition, int childPosition,
  14. boolean isLastChild, View convertView, ViewGroup parent) {
  15. // 是
  16. final ExpandableListView treeView = getExpandableListView();
  17. final TreeViewAdapter treeViewAdapter = new TreeViewAdapter(
  18. this.parentContext, 0);
  19. // 临时变量取得TreeViewAdapter的TreeNode集合,可为空
  20. List<TreeNode> tmp = treeViewAdapter.getTreeNode();
  21. final TreeNode treeNode = (TreeNode) getChild(groupPosition,
  22. childPosition);
  23. tmp.add(treeNode);
  24. treeViewAdapter.updateTreeNode(tmp);
  25. treeView.setAdapter(treeViewAdapter);
  26. // 取得选中的二级树形菜单的父子节点,结果返回给外部回调函数
  27. treeView.setOnChildClickListener(this.stvClickEvent);
  28. /**
  29. * 第二级菜单展开时通过取得节点数来设置第三级菜单的大小
  30. */
  31. treeView.setOnGroupExpandListener(new OnGroupExpandListener() {
  32. @Override
  33. public void onGroupExpand(int groupPosition) {
  34. AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
  35. ViewGroup.LayoutParams.FILL_PARENT, (treeNode.childs
  36. .size() + 1) * TreeViewAdapter.ItemHeight + 0);
  37. treeView.setLayoutParams(lp);
  38. }
  39. });
  40. /**
  41. * 第二级菜单回收时设置为标准Item大小
  42. */
  43. treeView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
  44. @Override
  45. public void onGroupCollapse(int groupPosition) {
  46. AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
  47. ViewGroup.LayoutParams.FILL_PARENT,
  48. TreeViewAdapter.ItemHeight);
  49. treeView.setLayoutParams(lp);
  50. }
  51. });
  52. treeView.setPadding(TreeViewAdapter.PaddingLeft * 2, 0, 0, 0);
  53. return treeView;
  54. }
  55. /**
  56. * 三级树结构中的首层是TextView,用于作为title
  57. */
  58. public View getGroupView(int groupPosition, boolean isExpanded,
  59. View convertView, ViewGroup parent) {
  60. TextView textView = TreeViewAdapter.getTextView(this.parentContext);
  61. textView.setText(getGroup(groupPosition).toString());
  62. // 设置首层menu标题背景
  63. textView.setBackgroundResource(R.drawable.menu_category);
  64. textView.setPadding(TreeViewAdapter.PaddingLeft * 2, 0, 0, 0);
  65. return textView;
  66. }

效果图:

完整代码下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号