import java.util.Collections;
import java.util.List;
import ptt.terminalsdk.context.BaseApplication;
import ptt.terminalsdk.model.Folder;
import ptt.terminalsdk.receiveHandler.ReceiveChangeGroupConformationHandler;
import ptt.terminalsdk.receiveHandler.ReceiveHandler;
import ptt.terminalsdk.tools.Params;
//import ptt.terminalsdk.context.BaseApplication;
//import ptt.terminalsdk.receiveHandler.ReceiveHandler;
//import ptt.terminalsdk.tools.FolderToGroupUtil;
//import ptt.terminalsdk.tools.Params;
//import ptt.terminalsdk.tools.FolderToGroupUtil.GroupFolder;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.ButterKnife;
import cn.zectec.ptt.R;
import cn.zectec.ptt.application.MyApplication;
import cn.zectec.ptt.utils.DataUtil;
public class GroupContactsAdapter extends BaseExpandableListAdapter{
private Context context;
private List<Folder> folderLists;
private ViewHolderFolder viewHolderFolder;
private ViewHolderGroup viewHolderGroup;
private ReceiveHandler receiveChangeGroupConformationHandler;
private int mGroupPosition;
private int mChildPosition;
public GroupContactsAdapter(Context context,List<Folder> folderLists,
int mGroupPosition,int mChildPosition, ReceiveChangeGroupConformationHandler receiveChangeGroupConformationHandler) {
this.context = context;
this.folderLists = folderLists;
this.mGroupPosition = mGroupPosition;
this.mChildPosition = mChildPosition;
this.receiveChangeGroupConformationHandler = receiveChangeGroupConformationHandler;
}
@Override
public int getGroupCount() {
return folderLists.size();
}
@Override
public int getChildrenCount(int groupPosition) {
if (folderLists.get(groupPosition).name.equals("常用组")) {
if (BaseApplication.catchGroupIdList.size()<=5) {
return BaseApplication.catchGroupIdList.size();
} else {
return 5;
}
} else {
return folderLists.get(groupPosition).groups.size();
}
}
@Override
public Object getGroup(int groupPosition) {
return folderLists.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return folderLists.get(groupPosition).groups.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
viewHolderFolder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.folder_list_detial, null);
viewHolderFolder = new ViewHolderFolder(convertView);
convertView.setTag(viewHolderFolder);
}else{
viewHolderFolder = (ViewHolderFolder) convertView.getTag();
}
//文件夹图标变化
if (isExpanded) {
viewHolderFolder.iv_folder
.setBackgroundResource(R.drawable.folder_open);
} else {
viewHolderFolder.iv_folder
.setBackgroundResource(R.drawable.folder_close);
}
//当前所在的文件夹是被选中的状态
if (folderLists.get(groupPosition).name
.equals(DataUtil.getFolderByGroupId(BaseApplication
.getInstance().getParam(
Params.CURRENT_GROUP_ID, 0)).name)) {
viewHolderFolder.textViewFloderName
.setTextColor(context.getResources().getColor(
R.color.group_name_selected));
viewHolderFolder.iv_folder_selected
.setVisibility(View.VISIBLE);
} else {
viewHolderFolder.textViewFloderName
.setTextColor(context.getResources().getColor(
R.color.folder_name));
viewHolderFolder.iv_folder_selected
.setVisibility(View.INVISIBLE);
}
//文件夹名字赋值
viewHolderFolder.textViewFloderName.setText(folderLists
.get(groupPosition).name);
//文件夹包含组的数量
if (folderLists.get(groupPosition).name.equals("常用组")) {
if (BaseApplication.catchGroupIdList.size() <= 5) {
viewHolderFolder.textViewFloderNumber.setText(""
+ BaseApplication.catchGroupIdList.size());
} else {
viewHolderFolder.textViewFloderNumber.setText("5");
}
} else {
viewHolderFolder.textViewFloderNumber.setText(""
+ folderLists.get(groupPosition).groups.size());
}
//文件夹包含组的数量的字体颜色
viewHolderFolder.textViewFloderNumber.setTextColor(context
.getResources().getColor(R.color.folder_number));
System.out.println("getGroupView");
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
viewHolderGroup = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.group_list_detail, null);
viewHolderGroup = new ViewHolderGroup(convertView);
convertView.setTag(viewHolderGroup);
}else{
viewHolderGroup = (ViewHolderGroup) convertView.getTag();
}
//组名的赋值
if (folderLists.get(groupPosition).name.equals("常用组")) {
for (int i = 0; i < BaseApplication.catchGroupIdList.size(); i++) {
if (i + childPosition == BaseApplication.catchGroupIdList
.size() - 1) {
viewHolderGroup.tv_group_name
.setText(DataUtil
.getGroupByGroupId(BaseApplication.catchGroupIdList
.get(i)).name);
}
}
} else {
Collections.sort(folderLists.get(groupPosition).groups);
viewHolderGroup.tv_group_name.setText(folderLists
.get(groupPosition).groups.get(childPosition).name);
}
//点击哪个条目,显示哪个按钮
if (mGroupPosition == groupPosition
&& mChildPosition == childPosition && mGroupPosition != -1
&& mChildPosition != -1) {
viewHolderGroup.tv_change_group.setVisibility(View.VISIBLE);
} else {
viewHolderGroup.tv_change_group.setVisibility(View.INVISIBLE);
}
//从可序列化文件中拿文件夹和组,定位到当前组
if (folderLists.get(groupPosition).name.equals(DataUtil
.getFolderByGroupId(MyApplication.getInstance().getParam(
Params.CURRENT_GROUP_ID, 0)).name)
&& folderLists.get(groupPosition).groups.get(childPosition).name
.equals(DataUtil.getGroupByGroupId(MyApplication
.getInstance().getParam(
Params.CURRENT_GROUP_ID, 0)).name)) {//组名一致
//“当前组”字体显示
viewHolderGroup.tv_current_group.setVisibility(View.VISIBLE);
//组名变红
viewHolderGroup.tv_group_name.setTextColor(context
.getResources().getColor(R.color.group_name_selected));
} else {
viewHolderGroup.tv_current_group.setVisibility(View.INVISIBLE);
viewHolderGroup.tv_group_name.setTextColor(context
.getResources().getColor(R.color.group_name));
}
viewHolderGroup.tv_change_group
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// ToastUtil.showToast(context, "切组到"+groupPosition+"------"+childPosition);
v.findViewById(R.id.tv_change_group).setVisibility(
View.GONE);
// 快速切换到选择的组
MyApplication.getInstance().registReceiveHandler(
receiveChangeGroupConformationHandler);
if (folderLists.get(groupPosition).name
.equals("常用组")) {
for (int i = 0; i < BaseApplication.catchGroupIdList
.size(); i++) {
if (i + childPosition == BaseApplication.catchGroupIdList
.size() - 1) {
MyApplication
.getInstance()
.getGroupManager()
.changeGroup(
BaseApplication.catchGroupIdList
.get(i));
}
}
} else {
MyApplication
.getInstance()
.getGroupManager()
.changeGroup(
folderLists.get(groupPosition).groups
.get(childPosition).id);
}
}
});
System.out.println("getChildView");
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public static class ViewHolderFolder {
@Bind(R.id.iv_folder_selected)
ImageView iv_folder_selected;
@Bind(R.id.iv_folder)
ImageView iv_folder;
@Bind(R.id.tv_folder_number)
TextView textViewFloderNumber;
@Bind(R.id.tv_folder_name)
TextView textViewFloderName;
public ViewHolderFolder(View rootView) {
ButterKnife.bind(this,rootView);
}
}
public static class ViewHolderGroup {
@Bind(R.id.tv_current_group)
TextView tv_current_group;
@Bind(R.id.tv_group_name)
TextView tv_group_name;
@Bind(R.id.tv_change_group)
TextView tv_change_group;
public ViewHolderGroup(View rootView) {
ButterKnife.bind(this,rootView);
}
}
public void refreshGroupContactsAdapter(int mGroupPosition,int mChildPosition) {
this.mGroupPosition = mGroupPosition;
this.mChildPosition = mChildPosition;
notifyDataSetChanged();
}
//定义当前listview是否在滑动状态
private boolean scrollState=false;
public void setScrollState(boolean scrollState) {
this.scrollState = scrollState;
}
private boolean expandState=false;
public void setexpandState(boolean expandState) {
this.expandState = expandState;
}
}
以上是我的adapter类,其中folderlists是数据原,大概有300多条,为什么滑动时仍然卡顿?