expandablelistview学习--在listView里面嵌套GridView

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

在网上看到一个例子,讲android中的expandablelistview,是一种可以扩展的listview,就是那种点击一下可以扩展出子项,再点一下收缩回去的显示list。因为需要查看一堆文件的目录结构,就使用了expandablelist以便于直观地看到结构形式。

顶层是group,第二层是child。实现ExpandableListView至少需要下面两个类。

一、ExpandableListView

一个垂直滚动的显示两个级别(Child,Group)列表项的视图,列表项来自ExpandableListAdapter 。组可以单独展开。

其所用到的重要方法如下:

expandGroup(int groupPos) :在分组列表视图中展开一组,

setSelectedGroup(int groupPosition) :设置选择指定的组。

setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。

getPackedPositionGroup(long packedPosition) :返回所选择的组

getPackedPositionForChild(int groupPosition, int childPosition) :返回所选择的子项

getPackedPositionType(long packedPosition) :返回所选择项的类型(Child,Group)

isGroupExpanded(int groupPosition) :判断此组是否展开

二、ExpandableListAdapter

一个接口,将基础数据链接到一个ExpandableListView。此接口的实施将提供访问Child的数据(由组分类),并实例化的Child和Group。

其里面重要方法:

getChildId(int groupPosition, int childPosition) 获取与在给定组给予孩子相关的数据。

getChildrenCount(int groupPosition) 返回在指定Group的Child数目。

getChildView() 获取子视图(就是二级视图)

getChildView()获取父视图

当我们想做到自己的打开或者关闭的标记时,可以先设置一个selector.xml,然后再用ExpandableListView的实例去调用setGroupIndicator(this.getResources().getDrawable(R.drawable.expand_list_selector)); 这样就可以了。

下面就看下例子:

这个代码好像也是在eoe上下载下来的,具体也记不太清楚了,先看下效果图:

\

先给下代码,人家写的,咱们学习下:

public class ListViewActivity extends Activity

{

ExpandableListView expandableListView;

ListViewAdapter treeViewAdapter;

public String[] groups = { "列表1", "列表2", "列表3" };

public String[][] child = { { "" }, { "" }, { "", "" } };

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

treeViewAdapter = new ListViewAdapter(this,

ListViewAdapter.PaddingLeft >> 1);

expandableListView = (ExpandableListView) this

.findViewById(R.id.expandableListView);

List<ListViewAdapter.TreeNode> treeNode = treeViewAdapter.GetTreeNode();

for (int i = 0; i < groups.length; i++)

{

ListViewAdapter.TreeNode node = new ListViewAdapter.TreeNode();

node.parent = groups[i];

for (int ii = 0; ii < child[i].length; ii++)

{

node.childs.add(child[i][ii]);

}

treeNode.add(node);

}

treeViewAdapter.UpdateTreeNode(treeNode);

expandableListView.setAdapter(treeViewAdapter);

}

}

GridView的定义:

class MyGridView extends GridView { public MyGridView(android.content.Context context, android.util.AttributeSet attrs) { super(context, attrs); } /** * 设置不滚动 */ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }

adapter的代码:

public class ListViewAdapter extends BaseExpandableListAdapter implements

OnItemClickListener

{

public static final int ItemHeight = 48;// 每项的高度

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

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

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

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

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

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

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

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

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

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

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

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

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

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