expanlistview 用viewholder做过优化,可还是很卡顿,没法用,怎么回事?



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多条,为什么滑动时仍然卡顿?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值