80,351
社区成员
发帖
与我相关
我的任务
分享
private Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
if (expandableListView.isGroupExpanded(msg.what)) {
expandableListView.collapseGroup(msg.what);
} else {
expandableListView.expandGroup(msg.what);
}
package com.example.androidx;
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseExpandableListAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ExpandableAdapter extends BaseExpandableListAdapter {
private LayoutInflater inflater;
private List<String> group;
private List<List<String>> child;
private Context context;
private Handler handler;
//展开的GroupId
private int expandIndex = -1;
//关闭的GroupId
private int collapsIndex = -1;
public ExpandableAdapter(Context context, Handler handler, List<String> group, List<List<String>> child) {
// TODO Auto-generated constructor stub
this.group = group;
this.child = child;
this.context = context;
this.handler = handler;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final GroupHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.layout_group_item, null);
holder = new GroupHolder();
holder.groupView = (TextView) convertView.findViewById(R.id.group_content);
//添加一个TextView
addGroupView(context, convertView, groupPosition);
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
holder.groupView.setText(group.get(groupPosition));
LinearLayout layout = (LinearLayout) convertView;
//如果点击的的是收起 改变文字
if (collapsIndex == groupPosition && isExpanded == false) {
layout.getChildAt(layout.getChildCount() - 1).setVisibility(View.VISIBLE);
}
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ChildHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.layout_child_item, null);
holder = new ChildHolder();
holder.childView = (TextView) convertView.findViewById(R.id.child_content);
if (isLastChild == true) {
addChildView(context, convertView, groupPosition);
}
convertView.setTag(holder);
} else {
holder = (ChildHolder) convertView.getTag();
}
holder.childView.setText(child.get(groupPosition).get(childPosition));
return convertView;
}
//展开
@Override
public void onGroupExpanded(int groupPosition) {
collapsIndex = -1;
expandIndex = groupPosition;
System.out.println("展开展开展开");
}
//收起
@Override
public void onGroupCollapsed(int groupPosition) {
expandIndex = -1;
collapsIndex = groupPosition;
System.out.println("关闭关闭关闭");
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
public class GroupHolder {
// TODO Auto-generated method stub
TextView groupView;
}
public class ChildHolder {
// TODO Auto-generated method stub
TextView childView;
}
//展开回复;可能存在多个;每个convertView限加一个
public void addGroupView(Context context, View v, final int groupIndex) {
LinearLayout layout = (LinearLayout) v;
final TextView mGroupView = new TextView(context);
mGroupView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mGroupView.setText("点击展开");
mGroupView.setBackgroundResource(R.drawable.selector);
mGroupView.setTextColor(Color.WHITE);
mGroupView.setPadding(0, 10, 0, 10);
mGroupView.setGravity(Gravity.CENTER);
mGroupView.setId(M_GROUP_ID);
mGroupView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//点击展开
handler.sendEmptyMessage(groupIndex);
mGroupView.setVisibility(View.GONE);
}
});
for (int i = 0; i < layout.getChildCount(); i++) {
//如果该TextView存在 则不添加
if (layout.getChildAt(i).getId() == M_GROUP_ID) {
return;
}
}
layout.addView(mGroupView);
}
//展开回复;可能存在多个;每个convertView限加一个
public void addChildView(Context context, View v, final int groupIndex) {
LinearLayout layout = (LinearLayout) v;
final TextView mChildView = new TextView(context);
mChildView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mChildView.setText("点击收起");
mChildView.setBackgroundResource(R.drawable.selector);
mChildView.setTextColor(Color.WHITE);
mChildView.setPadding(0, 10, 0, 10);
mChildView.setGravity(Gravity.CENTER);
mChildView.setId(M_CHILD_ID);
mChildView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//点击展开
handler.sendEmptyMessage(groupIndex);
mChildView.setVisibility(View.GONE);
}
});
for (int i = 0; i < layout.getChildCount(); i++) {
//如果该TextView存在 则不添加
if (layout.getChildAt(i).getId() == M_CHILD_ID) {
return;
}
}
layout.addView(mChildView);
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return group.size();
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return child.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return group.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return child.get(groupPosition).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
private final int M_GROUP_ID = 0x299;
private final int M_CHILD_ID = 0x399;
}
思路简单明了;在getview 的时候添加一个TextView 再监听这个Textview;
点击之后发送hander 去展开或者是关闭该列表
实际情况是这个列表跟我想象的不一样 这样做点一下就会有bug