Android之ExpandableListView
ExpandableListView可以用来表现多层级的listView,本文主要是ExpandableListView的一个简单实现
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_height="50dip"
android:layout_width="match_parent"
android:background="#297DC6">
<TextView
android:layout_marginLeft="100dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Email"
android:textColor="#ffffff"
android:textSize="20sp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
<ExpandableListView
android:id="@+id/list"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
MainActivity实现
package com.zj.expandandview;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
public class MainActivity extends Activity {
private ExpandableListView expendView;
private int []group_click=new int[5];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MyExpendAdapter adapter=new MyExpendAdapter();
expendView=(ExpandableListView) findViewById(R.id.list);
expendView.setGroupIndicator(null); //设置默认图标不显示
expendView.setAdapter(adapter);
//一级点击事件
expendView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
group_click[groupPosition]+=1;
adapter.notifyDataSetChanged();
return false;
}
});
//二级点击事件
expendView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
//可在这里做点击事件
if(groupPosition==0&&childPosition==1){
}else if(groupPosition==0&&childPosition==0){
//Intent intent=new Intent(MainActivity.this, MailConstactsActivity.class);
//startActivity(intent);
}else if(groupPosition==1&&childPosition==0){
//Intent intent=new Intent(MainActivity.this, MailEditActivity.class);
//startActivity(intent);
}else if(groupPosition==1&&childPosition==1){
//Intent intent=new Intent(MainActivity.this, MailCaogaoxiangActivity.class);
//startActivity(intent);
}else if(groupPosition==2&&childPosition==0){
}else if(groupPosition==2&&childPosition==1){
//Intent intent=new Intent(MainActivity.this, MailBoxActivity.class);
//intent.putExtra("TYPE", "INBOX");
//intent.putExtra("status", 1);//未读
//startActivity(intent);
}else if(groupPosition==2&&childPosition==2){
//Intent intent=new Intent(MainActivity.this, MailBoxActivity.class);
//intent.putExtra("TYPE", "INBOX");
//intent.putExtra("status", 2);//已读
//startActivity(intent);
}
adapter.notifyDataSetChanged();
return false;
}
});
}
/**
* 适配器
* @author Administrator
*
*/
private class MyExpendAdapter extends BaseExpandableListAdapter{
/**
* pic state
*/
//int []group_state=new int[]{R.drawable.group_right,R.drawable.group_down};
/**
* group title
*/
String []group_title=new String[]{"联系人","写邮件","收件箱"};
/**
* child text
*/
String [][] child_text=new String [][]{
{"联系人列表","添加联系人"},
{"新邮件","草稿箱"},
{"全部邮件","未读邮件","已读邮件"},};
int [][] child_icons=new int[][]{
{R.drawable.listlianxiren,R.drawable.tianjia},
{R.drawable.xieyoujian,R.drawable.caogaoxiang},
{R.drawable.all,R.drawable.notread,R.drawable.hasread},
};
/**
* 获取一级标签中二级标签的内容
*/
@Override
public Object getChild(int groupPosition, int childPosition) {
return child_text[groupPosition][childPosition];
}
/**
* 获取二级标签ID
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
/**
* 对一级标签下的二级标签进行设置
*/
@SuppressLint("SimpleDateFormat")
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
convertView=getLayoutInflater().inflate(R.layout.email_child, null);
TextView tv=(TextView) convertView.findViewById(R.id.tv);
tv.setText(child_text[groupPosition][childPosition]);
ImageView iv=(ImageView) convertView.findViewById(R.id.child_icon);
iv.setImageResource(child_icons[groupPosition][childPosition]);
return convertView;
}
/**
* 一级标签下二级标签的数量
*/
@Override
public int getChildrenCount(int groupPosition) {
return child_text[groupPosition].length;
}
/**
* 获取一级标签内容
*/
@Override
public Object getGroup(int groupPosition) {
return group_title[groupPosition];
}
/**
* 一级标签总数
*/
@Override
public int getGroupCount() {
return group_title.length;
}
/**
* 一级标签ID
*/
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
/**
* 对一级标签进行设置
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
convertView=getLayoutInflater().inflate(R.layout.email_group, null);
ImageView icon=(ImageView) convertView.findViewById(R.id.icon);
ImageView iv=(ImageView) convertView.findViewById(R.id.iv);
TextView tv=(TextView) convertView.findViewById(R.id.iv_title);
iv.setImageResource(R.drawable.group_right);
tv.setText(group_title[groupPosition]);
if(groupPosition==0){
icon.setImageResource(R.drawable.constants);
}else if(groupPosition==1){
icon.setImageResource(R.drawable.mailto);
}else if(groupPosition==2){
icon.setImageResource(R.drawable.mailbox);
}
if(group_click[groupPosition]%2==0){
iv.setImageResource(R.drawable.group_right);
}else{
iv.setImageResource(R.drawable.group_down);
}
return convertView;
}
/**
* 指定位置相应的组视图
*/
@Override
public boolean hasStableIds() {
return true;
}
/**
* 当选择子节点的时候,调用该方法
*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
参考链接 :
Android中ExpandableListView控件基本使用 - Android-Idea - 博客频道 - CSDN.NET
完成,效果如下
Android之ExpandableListView的更多相关文章
- 22.Android之ExpandableListView树形列表学习
Android经常用到树形菜单,一般ExpandableListView可以满足这个需要,今天学习下. XML代码: <?xml version="1.0" encoding ...
- Android 之 ExpandableListView 的使用
喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...
- Android中ExpandableListView控件基本使用
本文採用一个Demo来展示Android中ExpandableListView控件的使用,如怎样在组/子ListView中绑定数据源.直接上代码例如以下: 程序结构图: layout文件夹下的 mai ...
- Android在ExpandableListView控制的基本使用
在本文中,Demo为了展示Android在ExpandableListView用途管制.如该组/儿子ListView绑定数据源. 直接上代码例如以下: 程序结构图: layout文件夹下的 main. ...
- android 的 ExpandableListView Example Tutorial
https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...
- android原生ExpandableListView
android原生可扩展ExpandableListView就是可以伸缩的listView,一条标题下面有多条内容. 这个list的adapter对的数据要求与普通ListView的数据要求也有一些差 ...
- Android中ExpandableListView的使用
ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件中定义一个ExpandableListView < L ...
- android 之 ExpandableListView列表中的列表
有时候,我们需要设计这样一个界面,外面有一个列表,当我们点击其中列表中的某个条目时,就会展开这个条目,出现一个新的列表.比如下图:(程序运行的效果图,在这里贴出来) 当我们点击第一项时,视图变为: - ...
- Android 关于ExpandableListView去掉里头的分割线
关于ExpandableListView去掉里面的分割线关于ExpandableListView,自己写了个类继承自BaseExpandableListAdaptergroups,childs都弄好了 ...
随机推荐
- MVC模式介绍
MVC是一种通过3个不同部分构造一个软件或组件的理想办法: 1.模型(Model):用于存储数据的对象. 2.视图(View):为模型提供数据显示的对象. 控制器(Controller):负责具体的业 ...
- wifi与wimax
这几天在看文献中看到802.11a,802.11n和802.16e这几种无信通信协议标准,在网上查了相关资料后,看到有个帖子总结得不错,故将其转载过来. 转:http://blog.csdn.net/ ...
- php5.5安装及phpmyadmin&nginx配置php模块
安装php5.5: 下载源地址:rpm -Uvh rpm包安装:yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php ...
- 初学structs2,表单验证
一.简单表单验证示例 structs.xml配置 <struts> <package name="validate" namespace="/valid ...
- 初学structs2,简单配置
一.structs2-demo1项目下新建structs.xml文件,文件名必须是structs 二.package节点配置及其子节点配置 <!--name:单纯给包起个名字,保证和其他包不重名 ...
- subplot的应用
import matplotlib.pyplot as Plot Plot.subplot(3, 4, (1, 7)) Plot.subplot(1, 4, 4) Plot.subplot(3, 4, ...
- Jquery 鼠标事件解析
1 mouseover与mousemove的区别: mouseover是当鼠标移动到对象时产生,只产生一次,这时如果继续在对象上移动,不会再产生mouseover事件,而是mousemove事件,mo ...
- C语言产生随机数
rand产生随机数 #include"stdio.h" #include"stdlib.h" void main() { int i; for(i=0;i< ...
- OGNL和Struts2标签
OGNL和Struts2标签 你使用过的OGNL 页面获取并输出Action属性<s:property value="userName"/> 页面中获取request保 ...
- MVC中使用Tuple完成匿名类数据存储
使用MVC时,会遇到从Controller传递到View的数据只是某几个表中的几个字段的数据,有很多人都会想到能否把这几个字段组成一个匿名类传到View,但是这样好像行不通,所以有些时候我们会针对这几 ...