您的位置:首页 > 其它

模拟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>


运行效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: