模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。
2015-11-20 10:23
447 查看
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>
运行效果:
相关文章推荐
- GOLANG比较方便的地方
- 11月16日中国域名商解析量TOP15:易名中国亚军
- Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android-ConvenientBanner轻松实现广告头效果
- 代码方式删除SVN
- segment树(线段树)
- select框默认样式去除(ie中隐藏默认下拉图标)
- Maven 与 IntelliJ IDEA 的完美结合
- FastDFS文件系统(一) fastdfs是什么?
- 话说“TCP长连接与短连接”
- Linux下USB suspend/resume源码分析【转】
- 周月季判断
- 将actionbar menu放下面
- Java最全文件操作实例汇总
- 工作中用到的英语汇总
- IO - 同步,异步,阻塞,非阻塞
- HttpClient 讲解 (3) 智能拼装
- Java中的static关键字解析
- php中var_export与var_dump的区别分析
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数