模拟QQ分组(具有伸缩功能) SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

  1 package com.lixu.qqfenzu;
  2
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7
  8 import android.app.Activity;
  9 import android.content.Context;
 10 import android.graphics.Color;
 11 import android.os.Bundle;
 12 import android.view.LayoutInflater;
 13 import android.view.View;
 14 import android.view.View.OnClickListener;
 15 import android.view.ViewGroup;
 16 import android.widget.Button;
 17 import android.widget.EditText;
 18 import android.widget.ExpandableListView;
 19 import android.widget.ExpandableListView.OnGroupClickListener;
 20 import android.widget.SimpleExpandableListAdapter;
 21 import android.widget.TextView;
 22
 23 public class MainActivity extends Activity {
 24     private ArrayList<HashMap<String, Object>> date;
 25     private final String GROUP = "group";
 26     private final String CHILD = "child";
 27     EditText et;
 28     MyExpandableListAdapter mExpandableListAdapter = null;
 29
 30     @Override
 31     protected void onCreate(Bundle savedInstanceState) {
 32         super.onCreate(savedInstanceState);
 33         setContentView(R.layout.activity_main);
 34
 35         Button btn1 = (Button) findViewById(R.id.btn);
 36         Button btn2 = (Button) findViewById(R.id.btn1);
 37         et = (EditText) findViewById(R.id.et);
 38
 39         ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);
 40
 41         btn1.setOnClickListener(new OnClickListener() {
 42
 43             @Override
 44             public void onClick(View v) {
 45                 addGroup(2);
 46             }
 47         });
 48         btn2.setOnClickListener(new OnClickListener() {
 49
 50             @Override
 51             public void onClick(View v) {
 52                 addChild(1);
 53             }
 54         });
 55
 56         String[] group = { "家人", "朋友", "同事", "同学" };
 57         String[] name = { "张三", "李四", "王五", "狗儿" };
 58
 59         date = new ArrayList<HashMap<String, Object>>();
 60
 61         for (String n : group) {
 62             HashMap<String, Object> map = new HashMap<String, Object>();
 63
 64             map.put(GROUP, n);
 65
 66             ArrayList<String> child = new ArrayList<String>();
 67             for (String n1 : name) {
 68                 child.add(n1);
 69             }
 70
 71             map.put(CHILD, child);
 72             date.add(map);
 73
 74         }
 75
 76         mExpandableListAdapter = new MyExpandableListAdapter(this, null, 0, 0, null, null, null, 0, 0, null, null);
 77         elv.setAdapter(mExpandableListAdapter);
 78         // 去掉下拉小箭头
 79         elv.setGroupIndicator(null);
 80
 81         // 展开0组
 82         // elv.expandGroup(0);
 83         // 收起1组
 84         // elv.collapseGroup(1);
 85         // 展开2组
 86         // elv.expandGroup(2);
 87
 88         elv.setOnGroupClickListener(new OnGroupClickListener() {
 89
 90             @Override
 91             public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2, long arg3) {
 92                 return false;
 93             }
 94         });
 95     }
 96
 97     // 增加组
 98     public void addGroup(int pos) {
 99         String str = et.getText().toString();
100
101         HashMap<String, Object> map = new HashMap<String, Object>();
102
103         map.put(GROUP, str);
104
105         ArrayList<String> child = new ArrayList<String>();
106
107         map.put(CHILD, child);
108         date.add(pos, map);
109
110         mExpandableListAdapter.notifyDataSetChanged();
111         et.setText("");
112
113     }
114
115     // 增加特定组内数据
116     public void addChild(int pos) {
117         String str = et.getText().toString();
118         // 往第2组内添加数据
119         HashMap<String, Object> map = date.get(1);
120         ArrayList<String> list = (ArrayList<String>) map.get(CHILD);
121         list.add(pos, str);
122
123         mExpandableListAdapter.notifyDataSetChanged();
124         et.setText("");
125
126     }
127
128     private class MyExpandableListAdapter extends SimpleExpandableListAdapter {
129         private LayoutInflater flater = null;
130
131         public MyExpandableListAdapter(Context context, List<? extends Map<String, ?>> groupData,
132                 int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo,
133                 List<? extends List<? extends Map<String, ?>>> childData, int childLayout, int lastChildLayout,
134                 String[] childFrom, int[] childTo) {
135             super(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData,
136                     childLayout, lastChildLayout, childFrom, childTo);
137             flater = LayoutInflater.from(context);
138         }
139
140         @Override
141         public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
142                 ViewGroup parent) {
143             if (convertView == null)
144                 convertView = flater.inflate(android.R.layout.simple_list_item_1, null);
145
146             TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
147             tv.setText(getChild(groupPosition, childPosition) + "");
148
149             tv.setTextSize(20);
150
151             return convertView;
152         }
153
154         @Override
155         public int getChildrenCount(int groupPosition) {
156
157             ArrayList<String> items = (ArrayList<String>) date.get(groupPosition).get(CHILD);
158             return items.size();
159         }
160
161         @Override
162         public int getGroupCount() {
163             return date.size();
164         }
165
166         @Override
167         public Object getChild(int groupPosition, int childPosition) {
168             ArrayList<String> items = (ArrayList<String>) date.get(groupPosition).get(CHILD);
169             return items.get(childPosition);
170         }
171
172         @Override
173         public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
174             if (convertView == null)
175                 convertView = flater.inflate(android.R.layout.simple_list_item_1, null);
176
177             TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
178             tv.setText(getGroup(groupPosition).toString());
179             tv.setTextColor(Color.RED);
180             tv.setTextSize(30);
181
182             return convertView;
183
184         }
185
186         @Override
187         public Object getGroup(int groupPosition) {
188             HashMap<String, Object> items = date.get(groupPosition);
189             return items.get(GROUP) + "";
190         }
191
192     }
193
194 }

xml文件:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.lixu.qqfenzu.MainActivity" >
 6
 7     <ExpandableListView
 8         android:id="@+id/elv"
 9         android:layout_width="match_parent"
10         android:layout_height="300dp" />
11
12     <LinearLayout
13         android:id="@+id/linearLayout1"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_below="@id/elv" >
17
18         <EditText
19             android:id="@+id/et"
20             android:layout_width="100dp"
21             android:layout_height="wrap_content" >
22
23             <requestFocus />
24         </EditText>
25     </LinearLayout>
26
27     <Button
28         android:id="@+id/btn1"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:layout_alignParentRight="true"
32         android:layout_alignTop="@+id/linearLayout1"
33         android:text="添加内容" />
34
35     <Button
36         android:id="@+id/btn"
37         android:layout_width="wrap_content"
38         android:layout_height="wrap_content"
39         android:layout_alignBaseline="@+id/btn1"
40         android:layout_alignBottom="@+id/btn1"
41         android:layout_toLeftOf="@+id/btn1"
42         android:text="添加组" />
43
44 </RelativeLayout>

运行效果图:

时间: 2024-10-12 17:50:51

模拟QQ分组(具有伸缩功能) SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。的相关文章

【大话QT之八】模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

IOS 模拟QQ分组折叠

#define USER_KEY @"users" #define GROUPNAME_KEY @"groupName" @interfaceViewController ()<UITableViewDataSource,UITableViewDelegate> { UITableView *_tableView; NSMutableArray *_dataSource; BOOL expanded; } - (void)initializeDataSo

ArrayAdapter适配器的用法,模拟QQ发消息界面。

1 import java.util.ArrayList; 2 3 import android.app.Activity; 4 import android.content.Context; 5 import android.os.Bundle; 6 import android.view.LayoutInflater; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import androi

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

利用phantomjs模拟QQ自动登录

之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑到js可能会更新,放弃了此方案. 第二个想到的是能不能直接调用QQ自己的js方法,模拟进行提交呢.搜索一番后发现神器 ---- "phantomjs". PhantomJS is a headless WebKit scriptable with a JavaScript API. It

用Lucene实现分组,facet功能,FieldCache

假如你像用lucene来作分组,比如按类别分组,这种功能,好了你压力大了,lucene本身是不支持分组的. 当你想要这个功能的时候,就可能会用到基于lucene的搜索引擎solr. 不过也可以通过编码通过FieldCache和单字段,对索引进行分组,比如:想构造类别树.大类里面还有小类那种. 这个功能实现起来可能会比较麻烦,主要是lucene提供的支持也不多,参考资料也不多. (以下代码都是我在做测试的时候做的,可以稍作修改满足相应需求.) //用于分组统计的对象GroupCollector i

在网页中实现QQ在线客服功能的流程

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QQText.aspx.cs" Inherits="在线客服模块_QQText" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM