安卓ExpandableListAdapter的二级列表监听问题--自动收缩问题
来源:互联网 发布:jsp sql 动态网页 编辑:程序博客网 时间:2024/06/06 16:50
网上找ExpandableListAdapter的资料,基本上都是那个例子,而且没有带自定义布局的,都是直接在代码里新建一个布局来添加,于是我自己实现了一个适配器类:
package com.example.mycccarfriend;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.CollapsibleActionView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private ArrayList<HashMap<String, Object>> generalsTypes ;
//子列表个数限制了最大的列表数
private int[] generals = new int[] {
1
};
private Context context ;
private LayoutInflater inflater;
public ExpandableListAdapter(Context context,ArrayList<HashMap<String, Object>> generalsType) {
// TODO 自动生成的构造函数存根
this.context = context;
this.generalsTypes = generalsType;
this.inflater = LayoutInflater.from(context);
}
final class ViewHolder{
private TextView textView;
}
//重写ExpandableListAdapter中的各个方法
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return generalsTypes.size();
}
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return generalsTypes.get(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return generals.length;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return generals[childPosition];
}
@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 true;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//if(isExpanded)expandparent = groupPosition;
ViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_task, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.textView_item_task);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(generalsTypes.get(groupPosition).get("ItemText").toString());
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null){
convertView = inflater.inflate(R.layout.item_task_child, null);
}
ImageView telImageView = (ImageView)convertView.findViewById(R.id.imageView_item_task_child_tel);
telImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
String string = generalsTypes.get(groupPosition).get("ItemText").toString();
Toast.makeText(context, "打电话"+string, Toast.LENGTH_SHORT).show();
}
});
ImageView messageImageView= (ImageView)convertView.findViewById(R.id.imageView_item_task_child_message);
messageImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
Toast.makeText(context, "发短信", Toast.LENGTH_SHORT).show();
}
});
ImageView canImageView= (ImageView)convertView.findViewById(R.id.imageView_item_task_child_can);
canImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
generalsTypes.remove(groupPosition);
//onGroupCollapsed(groupPosition);
((MainActivity)context).taskListView.collapseGroup(groupPosition);
notifyDataSetChanged();
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
当然重点不在这里,重点在我的二级列表里,横向排布着三个imageview,其中一个长得像垃圾桶,表示删除,也就是删除该条目(注意,我一个父亲只有一个孩子列表,所以这个删除是指删除该条目的父列表),但是点击一个父列表,自动展开,再点击垃圾桶,成功删除,但是被删除的下一个列表却展开了(我并没有点击下一个列表),所以我想是不是因为我之前展开过被删除的列表的缘故,于是我就想调用一个函数,设置它收缩。
但是BaseExpandableListAdapter里面没有这个这是收缩的代码,我继续找,发现这个收缩的代码在ExpandableListView里面,于是我就把主函数里的那个ExpandableListview传进来,用里面的collapseGroup(int);来设置收缩,然后就行了,请看上面的canImageView。
我也试过在外部设置:
private int position;
taskListView.setOnGroupClickListener(new OnGroupClickListener(){
@Override
public boolean onGroupClick(ExpandableListView parent, View convertView,
int groupPosition, long id) {
// TODO 自动生成的方法存根
return false;
}
});
taskListView.setOnChildClickListener(new OnChildClickListener(){
@Override
public boolean onChildClick(ExpandableListView parent, View convertView,
int groupPosition, int childPosition, long id) {
// TODO 自动生成的方法存根
Log.v("1",groupPosition+"s");
ImageView canImageView= (ImageView)convertView.findViewById(R.id.imageView_item_task_child_can);
canImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {//convertView.getTag();
// TODO 自动生成的方法存根
taskListView.collapseGroup(position);Log.v("1",position+"y");
listItem.remove(position);
expandableListAdapter.notifyDataSetChanged();
}
});
return false;
}});
但是也有一个问题,画面第一次进去后点击垃圾桶没反应,根据日志发现是点击了子列表,而不是子列表里面的imageView(我绝对没点歪),然后再点垃圾桶才能删除。
看上面代码原来是先对子列表进行监听,然后才能对imageView监听,那当然第一次点击是监听到子列表了。所以还是得用更上面的方法,在适配器里调用。
另外,要设计点击一项下拉,点击另一项旧下拉项会收缩,也就是永远只能出现一个下拉项的话,可以这样写:
taskListView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
for (int i = 0; i < expandableListAdapter.getGroupCount(); i++) {
if (groupPosition != i) {
taskListView.collapseGroup(i);
}
}
}
});
好了,这是我遇到的关于ExpandableListAdapter的收缩问题,困扰了我一天多,以上只是核心思想,不能直接运行,如果有人遇到相同的问题欢迎一起来探讨。
- 安卓ExpandableListAdapter的二级列表监听问题--自动收缩问题
- 二级列表SimpleExpandableListAdapter ,ExpandableListAdapter
- 安卓二级列表的适配器 带优化的 解决二级列表里添加了自定义view以后不能点击展开的问题
- 安卓二级列表 ExpandableListView
- ~~~关于ExpandableListAdapter的一个比较二的问题,求解啊~~~
- ExpandableListAdapter二级菜单适配器
- 二级列表碰到的部分问题及解决方法
- 安卓学习--二级列表BaseExpandableListAdapter
- 关于BUG收缩的问题!
- 关于收缩隐藏的问题
- 安卓系统无法自动对时的问题
- 前端开发:菜单栏的收缩问题
- Oracle监听启动后又自动停止的问题
- 安卓二级列表购物车 略屌略屌 一个类足矣
- 二级指针的问题汇总
- MySQL数据文件收缩问题
- MySQL数据文件收缩问题
- cell收缩问题
- 什么是 EUROCAE? 什么是 ED136,ED137,ED138?
- poj Six Degrees of Cowvin Bacond最“大”生成树
- jquery checkbox全选和反选
- clojure从零开始(二)
- ubuntu 14.04 磨合记
- 安卓ExpandableListAdapter的二级列表监听问题--自动收缩问题
- 如何优化LOG FILE SYNC
- maven学习笔记整理
- 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出
- android LayoutInflater.inflate()的参数介绍
- java的反射机制
- 2014新生暑假个人排位赛03 E. 学姐的数列
- HDU 2503 a/b + c/d
- Cocos2d-x 3.1.1 学习日志12--一Cocos2dx3.1.1移植到Android平台的方法(最有用最有效的!!)