在本文中,我们将详细介绍AndroidExpandableListView—仿QQ可折叠列表的各个方面,并为您提供关于android仿qq动态的相关解答,同时,我们也将为您带来关于027Android
在本文中,我们将详细介绍Android ExpandableListView—仿QQ可折叠列表的各个方面,并为您提供关于android仿qq动态的相关解答,同时,我们也将为您带来关于027 Android 可扩展的 listview:ExpandableListView 的使用案例、Android ExpandableListView、android ExpandableListView 图标的自定义、Android ExpandableListView 展开列表控件(手机QQ好友列表)的有用知识。
本文目录一览:- Android ExpandableListView—仿QQ可折叠列表(android仿qq动态)
- 027 Android 可扩展的 listview:ExpandableListView 的使用案例
- Android ExpandableListView
- android ExpandableListView 图标的自定义
- Android ExpandableListView 展开列表控件(手机QQ好友列表)
Android ExpandableListView—仿QQ可折叠列表(android仿qq动态)
ExpandableListView
- 简介
- 使用
简介
ExpandableListView是一个可以折叠的列表、继承自ListView,相信大家对ListView也是非常熟悉的了,ExpandableListView的使用方法跟ListView差不多,但也要比ListView繁琐,如果ListView没入门的建议先看看这篇:https://blog.csdn.net/weixin_44758662/article/details/107677851。ExpandableListView的功能指向性非常强,就是用来做可折叠列表的 如最常用的QQ的分组
该实例基本复刻了QQ的折叠列表,知识点完全够用了,建议收藏起来
原创不易、给个关注把。
使用
1、创建视图
(1)、创建group(父项)的视图 只有一个TextView组件
注意:
TextView要预留一个向左的大概40dp的空间以便显示折叠的箭头 不然折叠的箭头会被覆盖住,就看不见了。 android:layout_marginLeft=“40dp”
eplistv_test_group.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="50dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/tv_id"
android:text="我的好友"
android:textSize="18sp"
android:layout_marginLeft="40dp"
android:gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
(2)、创建child的视图
这个就没什么注意的地方了 ,就是整整牌面
eplistv_test_child.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="16dp"
android:minHeight="70dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/img_pic"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/pic2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
/>
<TextView
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:textSize="15sp"
android:text="编辑人生"
android:layout_marginTop="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/img_pic"
/>
<TextView
android:id="@+id/tv_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:textSize="13sp"
android:layout_marginTop="3dp"
android:text="[wifi在线]"
app:layout_constraintLeft_toRightOf="@id/img_pic"
app:layout_constraintTop_toBottomOf="@id/tv_id"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
(3)、创建一个主视图
里面有一个 ExpandableListView
注意:一定要 设置android:divider="@null"这个属性等于null 才可以去点 ExpandableListView的下划线,不然是相当的难看。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<ExpandableListView
android:id="@+id/eplistv_test"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="16dp"
android:divider="@null"
android:overScrollMode="never"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
(1)、MainActivity 主要就是为 ExpandableListView设置适配器和创建一下模拟的数据的 主要请看下面的ExpandableListView适配器部分
package com.example.myapplication123;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity2 extends AppCompatActivity {
private ExpandableListView expandableListView;
private List<List<itemsBean>> child ; //一共有两个List 第一个是组别,第二个是组别中的数据
private List<String> group; //组的名称
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initData();
expandableListView = findViewById(R.id.eplistv_test);
//创建适配器
MyExlistadapter myExpandableList = new MyExlistadapter(MainActivity2.this,group,child);
expandableListView.setAdapter(myExpandableList);
//设置每一项的点击事件
expandableListView.setonChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity2.this,"单击了"+child.get(groupPosition).get(childPosition).getId(),Toast.LENGTH_SHORT).show();
return false;
}
});
}
//设置一下模拟的数据
private void initData(){
List<itemsBean> items = new ArrayList(); //组别中的数据
child = new ArrayList();
group = new ArrayList<>();
group.add("我的好友");
group.add("朋友");
group.add("家人");
//第一组数据
items.add(new itemsBean(R.mipmap.pic2,"1","[电脑在线]"));
items.add(new itemsBean(R.mipmap.pic3,"编辑人生","[手机在线]"));
items.add(new itemsBean(R.mipmap.pic4,"编辑人生","[WIFI在线]"));
items.add(new itemsBean(R.mipmap.pic2,"编辑人生","[WIFI在线]"));
child.add(new ArrayList<itemsBean>(items));
items.clear();
//第二组数据
items.add(new itemsBean(R.mipmap.pic3,"2","[电脑在线]"));
items.add(new itemsBean(R.mipmap.pic4,"编辑人生","[手机在线]"));
items.add(new itemsBean(R.mipmap.pic2,"编辑人生","[平板在线]"));
items.add(new itemsBean(R.mipmap.pic2,"编辑人生","[平板在线]"));
child.add(new ArrayList<itemsBean>(items));
items.clear();
//第三组数据
items.add(new itemsBean(R.mipmap.pic3,"3","[电脑在线]"));
items.add(new itemsBean(R.mipmap.pic4,"编辑人生","[手机在线]"));
items.add(new itemsBean(R.mipmap.pic2,"编辑人生","[平板在线]"));
items.add(new itemsBean(R.mipmap.pic2,"编辑人生","[平板在线]"));
child.add(new ArrayList<itemsBean>(items));
items.clear();
}
}
(2)、我直接在代码了注释了 ,详情请看代码。
先写一下itemBean的get set方法
这是 child中各组件的数据类型的封装
方便后面的操作
package com.example.myapplication123;
public class itemsBean {
int pic;
String id;
String state;
public itemsBean(int pic, String id, String state) {
this.pic = pic;
this.id = id;
this.state = state;
}
public int getPic() {
return pic;
}
public void setPic(int pic) {
this.pic = pic;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
创建MyExlistadapter类 继承自Baseexpandablelistadapter
该类是 ExpandableListView的适配器
注意 重写的isChildSelectable方法 要返回true,不然点击事件不起作用。
package com.example.myapplication123;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Baseexpandablelistadapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MyExlistadapter extends Baseexpandablelistadapter {
Context context;
private List<List<itemsBean>> child ; //一共有两个List 第一个是组别,第二个是组别中的数据
private List<String> group; //组的名称
public MyExlistadapter(Context context, List<String> group, List<List<itemsBean>> child){
this.context = context;
this.child = child;
this.group = group;
}
@Override
public int getGroupCount() {
return group.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return child.get(groupPosition).size(); //需要注意
}
@Override
public Object getGroup(int groupPosition) {
return group.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return child.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasstableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
groupHolder viewHolder;
if(convertView == null){
viewHolder = new groupHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.eplistv_test_group,null);
//对viewHolder的属性进行赋值
viewHolder.tvId= convertView.findViewById(R.id.tv_id);
//使用setTag缓存起来方便多次重用
convertView.setTag(viewHolder);
}
else{ //如果缓存池中有对应的缓存,则直接通过getTag取出viewHolder
viewHolder = (groupHolder) convertView.getTag();
}
viewHolder.tvId.setText(group.get(groupPosition));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
itemsHolder viewHolder;
if(convertView == null){
viewHolder = new itemsHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.eplistv_test_child,null);
//对viewHolder的属性进行赋值
viewHolder.tvId= convertView.findViewById(R.id.tv_id);
viewHolder.imgPicture= convertView.findViewById(R.id.img_pic);
viewHolder.tvstate= convertView.findViewById(R.id.tv_state);
//使用setTag缓存起来方便多次重用
convertView.setTag(viewHolder);
}
else{ //如果缓存池中有对应的缓存,则直接通过getTag取出viewHolder
viewHolder = (itemsHolder) convertView.getTag();
}
itemsBean info = (itemsBean) child.get(groupPosition).get(childPosition);
viewHolder.tvId.setText(info.getId());
viewHolder.tvstate.setText(info.getState());
viewHolder.imgPicture.setimageResource(info.getPic());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
class groupHolder{ //用于缓存Group控件
public TextView tvId;
}
class itemsHolder{ //用于缓存items控件
public ImageView imgPicture;
public TextView tvId,tvstate;
}
}
最终实现效果图
027 Android 可扩展的 listview:ExpandableListView 的使用案例
1.ExpandableListView 简介
ExpandableListView 是一种用于垂直滚动展示两级列表的视图,和 ListView 的不同之处就是它可以展示两级列表,分组可以单独展开显示子选项。这些选项的数据是通过 ExpandableListAdapter 关联的。
2.xml 页面布局
(1) 主界面布局 (CommonNumberQueryActivity 对应布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".CommonNumberQueryActivity">
<TextView
style="@style/TitleStyle"
android:text="常用号码查询" />
<!--可以扩展的listview:ExpandableListView-->
<ExpandableListView
android:id="@+id/elv_common_number"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ExpandableListView>
</LinearLayout>
(2)elv_child_item_group.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_group_name"
android:text="分组名称"
android:layout_marginLeft="40dp"
android:textSize="16sp"
android:textColor="@color/red"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
(3)elv_child_item_child.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_name"
android:text="电话名称"
android:textSize="16sp"
android:textColor="#000"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_number"
android:text="电话号码"
android:textSize="16sp"
android:textColor="#000"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
3.java 后台代码
package com.example.administrator.test62360safeguard;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.example.administrator.test62360safeguard.engine.CommonNumberDao;
import java.util.List;
public class CommonNumberQueryActivity extends AppCompatActivity {
ExpandableListView elv_common_number;
List<CommonNumberDao.Group> groupList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common_number_query);
initUI();
initData();
}
/**
* 给可扩展的listview:ExpandableListView准备数据,并填充
* 首先将对应的数据库文件放入assets目录下
*/
private void initData() {
CommonNumberDao commonNumberDao=new CommonNumberDao();
//获取数据库中的数据
groupList = commonNumberDao.getGroup();
System.out.println("groupList:"+groupList);
//给ExpandableListView设置数据适配器
elv_common_number.setAdapter(new MyAdapter());
}
private void initUI() {
elv_common_number = findViewById(R.id.elv_common_number);
}
private class MyAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return groupList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return groupList.get(groupPosition).childList.size();
}
@Override
public CommonNumberDao.Group getGroup(int groupPosition) {
return groupList.get(groupPosition);
}
@Override
public CommonNumberDao.Child getChild(int groupPosition, int childPosition) {
return groupList.get(groupPosition).childList.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
/**
* 固定写法不需要修改
*/
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View view = View.inflate(getApplicationContext(), R.layout.elv_child_item_group, null);
TextView tv_group_name = view.findViewById(R.id.tv_group_name);
tv_group_name.setText(getGroup(groupPosition).name);
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View view = View.inflate(getApplicationContext(), R.layout.elv_child_item_child, null);
TextView tv_name = view.findViewById(R.id.tv_name);
TextView tv_number = view.findViewById(R.id.tv_number);
tv_name.setText(getChild(groupPosition, childPosition).name);
tv_number.setText(getChild(groupPosition, childPosition).number);
return view;
}
/**
* @return 孩子节点是否响应事件
*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
}
4. 效果图
Android ExpandableListView
Android ExpandableListView
控件的使用
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ExpandableListView
android:id="@+id/expand_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
首先,添加ExpandableListView
到主页面中。
数据源设置
//用于 Item Group 数据源
private List<String> lsGroupData = new ArrayList<>();
//用于 Item Child 数据源
private List<List<String>> lsChildGroup = new ArrayList<>();
// 初始换数据
private void initData() {
int groupCount = 10;
for (int i = 0; i < groupCount; i++) {
lsGroupData.add("Item - " + i);
int childCount = new Random().nextInt(30);
List<String> lsChildData = new ArrayList<>();
for (int i1 = 0; i1 < childCount; i1++) {
lsChildData.add("item - " + i + " - " + i1);
}
lsChildGroup.add(lsChildData);
}
}
适配器 代码
public class MyAdapter extends Baseexpandablelistadapter {
private Context context;
private List<String> lsGroupData;
private List<List<String>> lsChildData;
/**
* 构造函数
* @param context
* @param lsGroupData 存储 关于 Item Group的全部数据
* @param lsChildData 存储关于 Item Child的全部数据
*/
MyAdapter(Context context, List<String> lsGroupData, List<List<String>> lsChildData) {
this.context = context;
this.lsGroupData = lsGroupData;
this.lsChildData = lsChildData;
}
/**
* 获取 Group 大小
* @return
*/
@Override
public int getGroupCount() {
return lsGroupData.size();
}
/**
* 获取 Child 大小
* @param groupPosition
* @return
*/
@Override
public int getChildrenCount(int groupPosition) {
return lsChildData.get(groupPosition).size();
}
/**
* 获取 指定 Position 下的Group 数据
* @param groupPosition
* @return
*/
@Override
public Object getGroup(int groupPosition) {
return lsGroupData.get(groupPosition);
}
/**
* 获取 指定 Position 下的Child 数据
* @param groupPosition
* @param childPosition
* @return
*/
@Override
public Object getChild(int groupPosition, int childPosition) {
return lsChildData.get(groupPosition).get(childPosition);
}
/**
* 获取Group ID
* @param groupPosition
* @return
*/
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
/**
* 获取Child ID
* @param groupPosition
* @param childPosition
* @return
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
/**
* 具有稳定的ID
* @return
*/
@Override
public boolean hasstableIds() {
return false;
}
/**
* 获取 Group 项的 View
* @param groupPosition
* @param isExpanded
* @param convertView
* @param parent
* @return
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_group, null);
}
TextView txtGroupName = convertView.findViewById(R.id.txtGroupName);
txtGroupName.setText(lsGroupData.get(groupPosition));
TextView txtItemCount = convertView.findViewById(R.id.txtItemsCount);
txtItemCount.setText(String.valueOf(lsChildData.get(groupPosition).size()));
return convertView;
}
/**
* 获取 Child 项的 View
* @param groupPosition
* @param childPosition
* @param isLastChild
* @param convertView
* @param parent
* @return
*/
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_child, null);
}
TextView txtChildName = convertView.findViewById(R.id.txtItemName);
txtChildName.setText(lsChildData.get(groupPosition).get(childPosition));
txtChildName.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, lsChildData.get(groupPosition).get(childPosition), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
这部分就是适配器代码。
我们来分析一下:
首先,我们将我们的适配器类继承与Baseexpandablelistadapter
然后重写如下方法:
我们重写下面所有的方法。
相关的方法注释在上面的代码中由具体写到。
最后,我们来看一下效果图:
这样,ExpandableListView
的使用就到这里了。
本控件学习自:https://www.jianshu.com/p/8bc7c8e97afc
android ExpandableListView 图标的自定义
在 ExpandableListView 的 xml 文件内设置
android:groupIndicator 属性
自定义一个 xml seletor
<item android:state_expanded="true"
android:drawable="@drawable/icon_ex_down"/>
<item android:state_expanded="false"
android:drawable="@drawable/icon_ex_right"/>
如果 groupview 布局背景也想自定义
请使用 RelativeLayout,使用 LinearLayout 会遮住图标
Android ExpandableListView 展开列表控件(手机QQ好友列表)
你是否觉得手机QQ上的好友列表那个控件非常棒? 不是..... 那也没关系, 学多一点知识对自己也有益无害。
那么我们就开始吧。
展开型列表控件,原名ExpandableListView 是普通的列表控件进阶版, 可以自由的把列表进行收缩, 非常的方便兼好看。
首先看看我完成的截图, 虽然界面不漂亮, 但大家可以自己去修改界面。
该控件需要一个主界面XML 一个标题界面XML及一个列表内容界面XML
首先我们来看看 mian.xml 主界面
//该界面非常简单, 只要一个ExpandableListView即可
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ExpandableListView android:id="@id/android::list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
groups.xml 该界面是父标题界面
我们只要放上一个要显示出来的标题TextView控件上去即可
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textGroup" ; android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="40px" android:paddingTop="6px" android:paddingBottom="6px" android:textSize="15sp" android:text="No data" /> </LinearLayout>childs.xml 是子控件, 直接显示列表内容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textChild" ; android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="60px" android:paddingTop="10px" android:paddingBottom="10px" android:textSize="20sp" android:text="No Data" /> </LinearLayout>接下来再上主代码, 命名有点乱, 大家真正用于开发时可不要这样命名啊.
public class ExpandActivity extends ExpandableListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //创建二个一级条目标题 Map<String, String> title_1 = new HashMap<String, String>(); Map<String, String> title_2 = new HashMap<String, String>(); title_1.put("group", "开发"); title_2.put("group", "管理"); //创建一级条目容器 List<Map<String, String>> gruops = new ArrayList<Map<String,String>>(); gruops.add(title_1); gruops.add(title_2); //创建二级条目内容 //内容一 Map<String, String> content_1 = new HashMap<String, String>(); Map<String, String> content_2 = new HashMap<String, String>(); content_1.put("child", "VC++"); content_2.put("child", "Java"); List<Map<String, String>> childs_1 = new ArrayList<Map<String,String>>(); childs_1.add(content_1); childs_1.add(content_2); //内容二 Map<String, String> content_3 = new HashMap<String, String>(); Map<String, String> content_4 = new HashMap<String, String>(); content_3.put("child", "敏捷开发"); content_4.put("child", "迭代开发"); List<Map<String, String>> childs_2 = new ArrayList<Map<String,String>>(); childs_2.add(content_3); childs_2.add(content_4); //存放两个内容, 以便显示在列表中 List<List<Map<String, String>>> childs = new ArrayList<List<Map<String,String>>>(); childs.add(childs_1); childs.add(childs_2); //创建ExpandableList的Adapter容器 //参数: 1.上下文 2.一级集合 3.一级样式文件 4. 一级条目键值 5.一级显示控件名 // 6. 二级集合 7. 二级样式 8.二级条目键值 9.二级显示控件名 SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter( this, gruops, R.drawable.groups, new String[]{"group"}, new int[]{R.id.textGroup}, childs, R.drawable.childs, new String[]{"child"}, new int[]{R.id.textChild} ); //加入列表 setListAdapter(sela); } }最后, 如果想响应各操作的话, 就要重载下面的方法
//列表内容按下 @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO Auto-generated method stub return super.onChildClick(parent, v, groupPosition, childPosition, id); } //二级标题按下 @Override public boolean setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) { // TODO Auto-generated method stub return super.setSelectedChild(groupPosition, childPosition, shouldExpandGroup); } //一级标题按下 @Override public void setSelectedGroup(int groupPosition) { // TODO Auto-generated method stub super.setSelectedGroup(groupPosition); }
再最后, 运行你的模拟器就可以看见啦。
控件化比较简单我们只要用普通的Activity类就可以了, 不用再继承ExpandableListView.
只需要在成员变量中添加
private ExpandableListView expandList;
然后在添加内容时改成
expandList.setAdapter(sela);
就可以了。 当然, 响应事件Listener也可以自己添加。
文章出处:http://blog.csdn.net/knowheart/article/details/7002079
今天的关于Android ExpandableListView—仿QQ可折叠列表和android仿qq动态的分享已经结束,谢谢您的关注,如果想了解更多关于027 Android 可扩展的 listview:ExpandableListView 的使用案例、Android ExpandableListView、android ExpandableListView 图标的自定义、Android ExpandableListView 展开列表控件(手机QQ好友列表)的相关知识,请在本站进行查询。
本文标签: