模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。
package com.lixu.qqfenzu; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.facebook.shimmer.ShimmerFrameLayout;
import com.romainpiel.shimmer.Shimmer;
import com.romainpiel.shimmer.ShimmerTextView; 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.Button;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private ArrayList<HashMap<String, Object>> date;
private final String GROUP = "group";
private final String CHILD = "child";
EditText et;
MyExpandableListAdapter mExpandableListAdapter = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn1 = (Button) findViewById(R.id.btn);
Button btn2 = (Button) findViewById(R.id.btn1);
et = (EditText) findViewById(R.id.et); ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv); btn1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
addGroup(2);
Toast.makeText(getApplicationContext(), "添加成功!", 0).show();
}
});
btn2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
addChild(1);
Toast.makeText(getApplicationContext(), "添加成功!", 0).show();
}
}); String[] group = { "家人", "朋友", "同事", "同学" };
String[] name = { "张三", "李四", "王五", "狗儿" }; date = new ArrayList<HashMap<String, Object>>(); for (String n : group) {
HashMap<String, Object> map = new HashMap<String, Object>(); map.put(GROUP, n); ArrayList<String> child = new ArrayList<String>();
for (String n1 : name) {
child.add(n1);
} map.put(CHILD, child);
date.add(map); } mExpandableListAdapter = new MyExpandableListAdapter(this, null, 0, 0, null, null, null, 0, 0, null, null);
elv.setAdapter(mExpandableListAdapter);
// 去掉下拉小箭头
elv.setGroupIndicator(null); // 展开0组
// elv.expandGroup(0);
// 收起1组
// elv.collapseGroup(1);
// 展开2组
// elv.expandGroup(2); elv.setOnGroupClickListener(new OnGroupClickListener() { @Override
public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2, long arg3) {
return false;
}
});
} // 增加组
public void addGroup(int pos) {
String str = et.getText().toString(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put(GROUP, str); ArrayList<String> child = new ArrayList<String>(); map.put(CHILD, child);
date.add(pos, map); mExpandableListAdapter.notifyDataSetChanged();
et.setText(""); } // 增加特定组内数据
public void addChild(int pos) {
String str = et.getText().toString();
// 往第2组内添加数据
HashMap<String, Object> map = date.get(1);
ArrayList<String> list = (ArrayList<String>) map.get(CHILD);
list.add(pos, str); mExpandableListAdapter.notifyDataSetChanged();
et.setText(""); } private class MyExpandableListAdapter extends SimpleExpandableListAdapter {
private LayoutInflater flater = null; 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, int lastChildLayout,
String[] childFrom, int[] childTo) {
super(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData,
childLayout, lastChildLayout, childFrom, childTo);
flater = LayoutInflater.from(context);
} @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
if (convertView == null)
convertView = flater.inflate(R.layout.list, null); ShimmerFrameLayout sfl = (ShimmerFrameLayout) convertView.findViewById(R.id.sfl); sfl.setDuration(2000);
sfl.startShimmerAnimation();
TextView tv = (TextView) convertView.findViewById(R.id.tv);
tv.setText(getChild(groupPosition, childPosition) + "");
tv.setTextSize(20); return convertView;
} @Override
public int getChildrenCount(int groupPosition) { ArrayList<String> items = (ArrayList<String>) date.get(groupPosition).get(CHILD);
return items.size();
} @Override
public int getGroupCount() {
return date.size();
} @Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<String> items = (ArrayList<String>) date.get(groupPosition).get(CHILD);
return items.get(childPosition);
} @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = flater.inflate(R.layout.list2, null); ShimmerTextView stv = (ShimmerTextView) convertView.findViewById(R.id.stv1);
stv.setText(getGroup(groupPosition).toString());
stv.setTextColor(Color.BLUE);
stv.setTextSize(30);
stv.setBackgroundColor(Color.YELLOW);
Shimmer shimmer = new Shimmer();
shimmer.setDuration(2500);
shimmer.start(stv); return convertView; } @Override
public Object getGroup(int groupPosition) {
HashMap<String, Object> items = date.get(groupPosition);
return items.get(GROUP) + "";
} } }
xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.lixu.qqfenzu.MainActivity" > <ExpandableListView
android:id="@+id/elv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2" /> <LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" > <EditText
android:id="@+id/et"
android:layout_width="100dp"
android:layout_height="wrap_content" >
</EditText> <Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/linearLayout1"
android:text="添加内容" /> <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn1"
android:layout_alignBottom="@+id/btn1"
android:layout_toLeftOf="@+id/btn1"
android:text="添加组" />
</LinearLayout> </LinearLayout>
<?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:orientation="vertical" > <com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/sfl"
android:layout_width="wrap_content"
android:layout_height="wrap_content" > <TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.facebook.shimmer.ShimmerFrameLayout> </LinearLayout>
<?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:orientation="vertical" > <com.romainpiel.shimmer.ShimmerTextView
android:id="@+id/stv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</com.romainpiel.shimmer.ShimmerTextView> </LinearLayout>
运行效果:

模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。的更多相关文章
- 模拟QQ系统设置面板实现功能
业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本 ...
- 模拟QQ分组
package com.lixu.fenzu; import java.util.ArrayList; import java.util.HashMap; import android.app.Lis ...
- Farseer.net轻量级开源框架 入门篇:添加数据详解
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...
- Farseer.net轻量级ORM开源框架说明及链接索引
项目简介 基于.net framework 4 开发. 基于Lambda表达式快速上手的ORM框架. 参考Entity Framework的调用方式. 基于Database First模式. POCO ...
- Farseer.net轻量级开源框架 入门篇:分类逻辑层
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
随机推荐
- 使用qmlscene预览qml文件
功能:可以预览qml文件的界面 使用:qmlscene myapp.qml
- 圆点博士 陀螺仪和加速度计MPU6050的单位换算方法
圆点博士陀螺仪和加速度计MPU6050的单位换算方法 陀螺仪和加速度计MPU6050的单位换算方法 对于四轴的初学者,可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法.下面我们来具体描述 ...
- 为什么我的电脑win系统没有便笺功能?为什么我在开始菜单里找不到便笺功能?
有些网友表示,为什么我的电脑没有便笺功能?为什么我在开始菜单里找不到便笺功能? 从问题可以基本判断出来,这些网友使用的Win7版本有可能是买笔记本或者台式电脑时预装的Win7家庭普通版或者Win7精简 ...
- 2:JavaScript中的基本运算
今天说的是JavaScript中的数据基本运算 在上一节中已经说了关于JavaScript中的基本数据类型 那么数据有了 剩下来就是数据之间的运算 表达式-------预算符(赋值 比较 算数 逻辑 ...
- Qt5.3.2(VS2010)_调试_遇到的问题
1.(20171124)调试程序 的时候,一直卡住,看到 右下角的进度里面,一直是"Launching Debugger"的状态 ZC: 一直找不到 原因... 尝试了 32位/6 ...
- 《A_Pancers》团队项目用户验收评审
团队项目用户验收评审 一.关于源代码管理的10 个问题: 1.你的团队的源代码控制在哪里?用的是什么系统?如何处理文件的锁定问题? 我们的项目都在github上面,用的win10系统,并且我们的文件没 ...
- ASCII 可打印字符与控制字符
2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使 ...
- ubuntu10.04 交叉编译 aria2 总结
1) google之后,找到 这个 https://github.com/z24/pitv/tree/master/cross 的脚本, 觉得非常好. 于是准备用来进行编译 2) 安装交叉编译器 su ...
- codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)
题意:给出一个数组,求其中和小于t的区间数. 先计算前缀和数组sum[i].对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间.再将当前的s ...
- USACO 铂金 T1
题意 给出一个数轴,每次可以选择停下并得到当前点的收益,或者继续随机向左右游走,走到边界游戏结束收益为0. 求从每个点出发的最大期望收益.(n<=1e5) 有一个显然的dp方程 这个方程是带环的 ...