gridview更新数据,发现每次更新getview,position=0的时候回调用很多次,这样我的设置数据会走很多次,造成资源占用;下边我就巧妙的解决这个问题。


下面贴下代码:里边注释地方是重点,重点看哦:


package com.wanzhao.imapp.adapter;import android.content.Context;import android.graphics.Bitmap;import android.os.AsyncTask;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.wanzhao.imapp.activity.R;import com.wanzhao.imapp.entity.imbean.User;import com.wanzhao.imapp.tools.L;import com.wanzhao.imapp.tools.task.GetHeadImgTask;import com.wanzhao.imapp.util.BitmapCache;import com.wanzhao.imapp.view.RoundHeadImageView;import java.util.ArrayList;import java.util.List;public class InstitutionalMemberGridAdapter extends BaseAdapter {    private Context mContext;    private List mUser;    private LayoutInflater mInflate;    private List mUserIndex; // 为了解决重复调用的问题    public InstitutionalMemberGridAdapter(Context context) {        mContext = context;        mInflate = LayoutInflater.from(mContext);    }    public List getUser() {        return mUser;    }    public void setUser(List User) {        this.mUser = User;        // 这里是重点        if (mUser != null) {            mUserIndex = new ArrayList<>();            int size = mUser.size();            for (int i = 0; i < size; i++) {                mUserIndex.add(i);            }        }        notifyDataSetChanged();    }    @Override    public int getCount() {        // TODO Auto-generated method stub        if (mUser != null) {            return mUser.size();        }        return 0;    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return 0;    }    Holder mHolder;    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        if (convertView == null) {            mHolder = new Holder();            convertView = mInflate.inflate(                    R.layout.item_fragment_institutional_member, parent, false);            mHolder.itemInstitutionalName = (TextView) convertView                    .findViewById(R.id.item_fragment_institutional_member_name);            mHolder.itemMemberImages = (RoundHeadImageView) convertView                    .findViewById(R.id.item_fragment_institutional_member_images);            convertView.setTag(mHolder);        } else {            mHolder = (Holder) convertView.getTag();        }        // 这里是重点        if (mUserIndex != null && mUserIndex.contains(position)) {            // 这里是重点,必须强转为Object类型,不然会报越界,因为remove是重载方法,有两个,但是参数类型不一样            mUserIndex.remove((Object) position);            User user = mUser.get(position);            mHolder.itemInstitutionalName.setText(user.getRealName());            String userCode = user.getUserCode();            L.d("mina---zuzhijiagou---userCode=" + userCode + ",position=" + position);            String id = mUser.get(position).getId();            mHolder.itemMemberImages.setTag(id);            try {                if (userCode.equals(user.getUserCode())) {                    setAvatar(mHolder.itemMemberImages, id, userCode, true);                }            } catch (Exception e) {                e.printStackTrace();            }        }        return convertView;    }    private void setAvatar(final ImageView iv, final String userId, final String userCode,                           final boolean isOnline) {        try {            // ----------------            if (!TextUtils.isEmpty(userId)) {                Bitmap bitmapAvatar = BitmapCache.getInstance().getBitmap(                        userId);                if (userId.equals(iv.getTag().toString())) {                    if (bitmapAvatar != null) {                        iv.setImageBitmap(bitmapAvatar);                    } else {                        new GetHeadImgTask(mContext, iv, userId, userCode, false,                                isOnline).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);                    }                }            }        } catch (Throwable e) {            iv.setImageResource(R.drawable.lxrmrzx2x);            // TODO Auto-generated catch block            e.printStackTrace();        }    }    private class Holder {        private TextView itemInstitutionalName;        private RoundHeadImageView itemMemberImages;    }}


看了就可以解决了。那些重复调用,一次性过滤,有用的话,给我评论个666吧~~~



更多相关文章

  1. 【Android多屏适配】动态改变Listview item高度
  2. 安卓学习笔记之使用widget桌面小控件及源码分析
  3. Android(安卓)vold核心篇(VolumeManager)
  4. Android(安卓)touch事件的派发流程
  5. android 使用相机时出现了 startpreview 报错
  6. android使用Camera调用系统原生的摄像头(前置与后置)
  7. Android初始篇二 Android四大组件之Activity
  8. Android(安卓)MMS/SMS(二)
  9. Android学习--深入探索RemoteViews

随机推荐

  1. 小计不重要
  2. html之常用布局实例
  3. 配置SSH密码登录
  4. linux(centos)下安装supervisor进程管理
  5. CSS-作业
  6. thinkphp内置集成workerman以守护进程方
  7. 配置ssh远程登录sshd服务器
  8. 固定定位的联系客服+简易的三行三列布局
  9. php学习第三天
  10. 字体图标、布局原理以及盒模型实例操作及