Android 多级树形菜单

  次阅读 作者:智能小宝 来源:互联网 2015-10-13 07:34 我要评论(0)

在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单......本文也依然使用ExpandableList,但是要实现的是3级树形菜单。本文程序运行效果图:

\

当用BaseExpandableListAdapter来实现二级树形菜单时,父项(getGroupView())和子项(getChildView())都是使用TextView。当要实现三级树形菜单时,子项(getChildView())就必须使用ExpandableList了.......另外还要定义结构体来方便调用三级树形的数据,二级树形菜单可以用如下:

static public class TreeNode{

Object parent;

List<Object> childs=new ArrayList<Object>();

}

三级树形菜单可以用如下,子项是二级树形菜单的结构体:

static public class SuperTreeNode {

Object parent;

//二级树形菜单的结构体

List<TreeViewAdapter.TreeNode> childs = new ArrayList<TreeViewAdapter.TreeNode>();

}

实现三级树形菜单有两点要注意的:

1、第二级也是个树形菜单,因此必须在第二级项目展开/回收时设置足够的空间来完全显示二级树形菜单;

2、在实现三级树形菜单时,发现菜单的方法都是用不了(如OnChildClickListener、OnGroupClickListener等),因此要获得选中的数据就必须在外部定义好回调函数,然后在第二级生成二级树形菜单时回调这个外部函数。

PS:本文在解决No.2关键点的时候,只能取得第三级选中的序号.....而第一,第二级依然无法获取其序号。

main.xml源码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout android:id="@+id/LinearLayout01"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<Button android:layout_height="wrap_content" android:text="两层结构"

android:layout_width="160dip" android:id="@+id/btnNormal"></Button>

<Button android:layout_height="wrap_content" android:text="三层结构"

android:layout_width="160dip" android:id="@+id/btnSuper"></Button>

</LinearLayout>

<ExpandableListView android:id="@+id/ExpandableListView01"

android:layout_width="fill_parent" android:layout_height="fill_parent"></ExpandableListView>

</LinearLayout>

testExpandableList.java是主类,调用其他工具类,源码如下:

package com.testExpandableList;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.Toast;

public class testExpandableList extends Activity {

/** Called when the activity is first created. */

ExpandableListView expandableList;

TreeViewAdapter adapter;

SuperTreeViewAdapter superAdapter;

Button btnNormal,btnSuper;

// Sample data set. children[i] contains the children (String[]) for groups[i].

public String[] groups = { "xxxx好友", "xxxx同学", "xxxxx女人"};

public String[][] child= {

{ "A君", "B君", "C君", "D君" },

{ "同学甲", "同学乙", "同学丙"},

{ "御姐", "萝莉" }

};

public String[] parent = { "xxxx好友", "xxxx同学"};

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...