QQ分组实现,可收缩---ExpandableListView
activity:
package com.zzw.qqgroup; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random; import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView; public class MainActivity extends Activity { private final String GROUP = "group";
private final String CHILD = "child"; private EditText editText;
private MyExpandableListAdapter mExpandableListAdapter; private ArrayList<HashMap<String, Object>> data; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); data = new ArrayList<HashMap<String, Object>>(); editText = (EditText) findViewById(R.id.editText); rawData(); ExpandableListView elv = (ExpandableListView) findViewById(R.id.expandableListView);
elv.setGroupIndicator(null);// 使收缩箭头消失 mExpandableListAdapter = new MyExpandableListAdapter(this, null, 0, 0, null, null, null, 0, null, null); elv.setAdapter(mExpandableListAdapter); /*
* 下面是演示
*/
// elv.expandGroup(0);// 展开0组
// elv.collapseGroup(1);// 收起1组 elv.setOnGroupClickListener(new OnGroupClickListener() { @Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
/*
* 安卓默认是返回false 如果返回true,则不管是点击已展开的分组还是未展开的分组都不会相应展开或者收缩的
*/
return false;
}
}); findViewById(R.id.addGroup).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
addGroup(2);
}
}); findViewById(R.id.addChild).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
addChild(2);
}
});
} // 在指定位置添加组
private void addGroup(int pos) {
String str = editText.getText() + "";
if (!str.trim().equals("")) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(GROUP, str);
ArrayList<String> childs = new ArrayList<String>();
map.put(CHILD, childs);
data.add(pos, map);
editText.setText("");
mExpandableListAdapter.notifyDataSetChanged();
}
} // 在尾部增加组
private void addGroup() {
String str = editText.getText() + "";
if (!str.trim().equals("")) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(GROUP, str);
ArrayList<String> childs = new ArrayList<String>();
map.put(CHILD, childs);
data.add(map);
editText.setText("");
mExpandableListAdapter.notifyDataSetChanged();
}
} // 指定组中指定位置添加child数据
private void addChild(int groupPos, int childPos) {
String str = editText.getText() + "";
if (!str.trim().equals("") && groupPos < data.size()) {
HashMap<String, Object> map = data.get(groupPos);
ArrayList<String> childs = (ArrayList<String>) map.get(CHILD);
if (childPos < childs.size()) {
childs.add(childPos, str);
editText.setText("");
mExpandableListAdapter.notifyDataSetChanged();
}
}
} // 指定组中尾部位置增加child元素
private void addChild(int groupPos) {
String str = editText.getText() + "";
if (!str.trim().equals("") && groupPos < data.size()) {
HashMap<String, Object> map = data.get(groupPos);
ArrayList<String> childs = (ArrayList<String>) map.get(CHILD);
childs.add(str);
editText.setText("");
mExpandableListAdapter.notifyDataSetChanged(); }
} // 初始化增加数据
private void rawData() {
// 设置分组
String[] g = { "我的好友", "朋友", "同学", "同事" };
String[] c = { "张三", "李四", "王二", "麻子", "钱五" }; Random rand = new Random();
for (int i = 0; i < g.length; i++) {
int count = 0;
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(GROUP, g[i]); ArrayList<String> child = new ArrayList<String>();
int r = rand.nextInt(10);
for (String ch : c) {
child.add("-------" + ch + count++);
}
map.put(CHILD, child); data.add(map);
}
} private class MyExpandableListAdapter extends SimpleExpandableListAdapter {
LayoutInflater inflater; public MyExpandableListAdapter(Context context, List<? extends Map<String, ?>> groupData,
int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo,
List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom,
int[] childTo) {
super(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData,
childLayout, childFrom, childTo);
inflater = LayoutInflater.from(context);
} @Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<String> items = (ArrayList<String>) data.get(groupPosition).get(CHILD); return items.get(childPosition);
} @Override
public int getChildrenCount(int groupPosition) { ArrayList<String> items = (ArrayList<String>) data.get(groupPosition).get(CHILD);
return items.size();
} @Override
public Object getGroup(int groupPosition) { return data.get(groupPosition).get(GROUP);
} @Override
public int getGroupCount() {
return data.size();
} @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_list_item_1, null);
}
TextView textView = (TextView) convertView.findViewById(android.R.id.text1);
textView.setText(getGroup(groupPosition) + "");
textView.setTextColor(Color.RED);
return convertView;
} @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.item, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.textView1);
textView.setText(getChild(groupPosition, childPosition) + "");
return convertView;
}
}
}
xml:
<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="wrap_content"
android:orientation="vertical"
tools:context="com.zzw.qqgroup.MainActivity" > <ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
</ExpandableListView> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" > <Button
android:id="@+id/addGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="增加分组" /> <Button
android:id="@+id/addChild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="增加联系人" /> <EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/addGroup"
android:layout_alignBottom="@+id/addGroup"
android:layout_toLeftOf="@+id/addChild"
android:layout_toRightOf="@+id/addGroup"
android:ems="10"
android:hint="请输入" > <requestFocus />
</EditText>
</RelativeLayout> </LinearLayout>
activity_main.xml
QQ分组实现,可收缩---ExpandableListView的更多相关文章
- QQ分组显示列表ExpandableListView组件应用源码
ExpandableListView又称为可扩展的ListView组件,他和ListView组件很相似 不过每行的显示有两个xml文件,一个xml文件用于定义分组列表的显示风格, 还有一个xml文件用 ...
- Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)
分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...
- 分组的listview——ExpandableListView
开发使用到的数据统计时可以用分组的ExpandablelistView 效果:
- iOS 实现类似QQ分组样式的几种方式
思路 思路很简单,对模型数据操作或则控制界面显示 先看下json部分数据 "chapterDtoList": [{ "token": null, "i ...
- js仿qq分组折叠效果
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。
package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...
- CSS+Jquery实现QQ分组列表
实现效果图如下: 说明: 1.css隐藏分组下的好友内容: 2.Jquery实现点击分组项事件,实现好友内容的显示和隐藏: 3.样式1,可展开多个分组:样式2,只能有一个分组展开: 源码: <! ...
- 模拟QQ分组
package com.lixu.fenzu; import java.util.ArrayList; import java.util.HashMap; import android.app.Lis ...
- C#编写一款qq消息群发器
先上软件成品图 功能编写大概分为以下几个部分了: 获取QQ分组 发送消息 先来讲发送消息吧,实现还是比较简单 //这段主要是用来打开会话窗口的(只能列表中的好友进行会话的) System.Diagno ...
随机推荐
- IOS键盘的相关设置(UITextfield)
一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboa ...
- POJ3264RMQ
http://poj.org/problem?id=3264 #include<stdio.h> #include<string.h> #include<algorith ...
- android 开发进阶自定义控件 类似 TextView
开发自定义控件的步骤: 1. 继承View: 2.重写构造函数并构造方法中获得我们自定义的属性. 3. 重写onDraw, 4.重写onMeasure 等函数 一.自定义View的属性,首先在res/ ...
- Solr数据库连接之多表关联
Solr环境配置好后,有很多时候我们需要把数据库里的数据添加到索引里,这时就需要配置跟数据库的连接,下面我们看配置的步骤. 1. 配置 solrconfig.xml (在slor 主目录 core ...
- 关于java.lang.String理解中的一些难点
最近温习java的一些基础知识,发现以往对String对象认识上的一些不足.特汇总如下,主要是帮助记忆,如能对其他朋友有些启发,不胜欣喜. String在JVM中内存驻留问题 JVM的常量区(Cons ...
- C程序之修改Windows的控制台颜色(转载)
Windows的CMD可以和Linux下的终端一样可以有五颜六色,目前我在网上找到2种方法可以修改Windows的CMD,当然都是在代码中修改的.在“CMD”->“属性”->“颜色”,这种 ...
- Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件
第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...
- 站点发布到 IIS 后,System.Data.SqlLite.dll 末找到
近来在部署一个站点到客户的服务器 IIS 上时,打开后却出现一个错误的页面,系统提示System.Data.SqlLite.dll 末找到,在站点部署到客户的服务器之前时,在本地测试,却没有发现什么异 ...
- 在 C# 控制台中记录异常日志并输出
最近做了一个小程序,要求在控制台中记录程序运行的异常并输出到指定的文件夹中,以下是我的具体的程序代码: public static void ErrorLog(Exception ex) { stri ...
- HTML DOM(学习笔记一)
嗯,工作也有一段时间了,对编程的认识也深入了一些,以前认为HTML/CSS/JAVASCRIPT是比较简单的,看网上的教程就可以了,W3C是我学习这些知识常去的一个网站,非常感谢她让我学习到了更多的一 ...