Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android gridview中图像的异步加载_Android_Android Gridview_Android Lazyloading - Fatal编程技术网

Android gridview中图像的异步加载

Android gridview中图像的异步加载,android,android-gridview,android-lazyloading,Android,Android Gridview,Android Lazyloading,目前我正在使用李宗海的android http图像管理器,但我面临的问题是,当图像被下载时,当我滚动网格视图列表时,该图像会显示在其他网格单元中。有人能帮我解决这个问题吗 这是我的适配器类: package com.syncusup.list.adapters; import java.io.File; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import

目前我正在使用李宗海的android http图像管理器,但我面临的问题是,当图像被下载时,当我滚动网格视图列表时,该图像会显示在其他网格单元中。有人能帮我解决这个问题吗

这是我的适配器类:

package com.syncusup.list.adapters;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.TextView;

import com.syncusup.R;
import com.syncusup.UILApplication;
import com.syncusup.httpimageloader.HttpImageManager;
import com.syncusup.model.VCard;
import com.syncusup.utils.SyncLocalDatabase;

public class LocalContactsAdapter extends ArrayAdapter<VCard> {

    private LayoutInflater mInflater;

    private ArrayList<VCard> mOriginalList;

    private ArrayList<VCard> mContactList;

    private HttpImageManager mHttpImageManager;

    private MyFilter mFilter;

    private Context mContext;

    private File aFileToCheck;

    public LocalContactsAdapter(Context iContext, ArrayList<VCard> iVcardsArray) {
        super(iContext, R.layout.localcontacts_row, iVcardsArray);
        this.mContactList = new ArrayList<VCard>();
        this.mContactList.addAll(iVcardsArray);
        this.mOriginalList = new ArrayList<VCard>();
        this.mOriginalList.addAll(iVcardsArray);
        this.mContext = iContext;
        mHttpImageManager = ((UILApplication)((Activity)mContext).getApplication())
                .getHttpImageManager();
    }

    private class ViewHolder {
        public TextView aContactName;

        public TextView aContact;

        public ImageView aContactImage;
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new MyFilter();
        }
        return mFilter;
    }

    @Override
    public int getPosition(VCard iItem) {
        return super.getPosition(iItem);
    }

    @Override
    public int getCount() {
        return mContactList.size();
    }

    @Override
    public VCard getItem(int iPosition) {
        return mContactList.get(iPosition);
    }

    @Override
    public long getItemId(int iPosition) {
        return iPosition;
    }

    @Override
    public View getView(final int iPosition, View iConvertView, ViewGroup iParent) {

        final ViewHolder aHolder;
        aFileToCheck = new File(Environment.getExternalStorageDirectory() + "/SyncUsUp/",
                SyncLocalDatabase.computeHashedName(mContactList.get(iPosition).getID()));

        if (iConvertView == null || iConvertView.getTag() == null) {
            // default layout inflater
            mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            iConvertView = mInflater.inflate(R.layout.localcontacts_row, null);
            aHolder = new ViewHolder();
            aHolder.aContactName = (TextView)iConvertView.findViewById(R.id.tvMyContactName);
            aHolder.aContact = (TextView)iConvertView.findViewById(R.id.tvMyContact);
            aHolder.aContactImage = (ImageView)iConvertView.findViewById(R.id.ivContact);
            iConvertView.setTag(aHolder);
        } else {
            aHolder = (ViewHolder)iConvertView.getTag();
        }

        ImageView aImageView = aHolder.aContactImage;
        aImageView.setImageResource(R.drawable.contact_box_blanktile);

        try {
            if (mContactList.get(iPosition).getPhoto() != null) {
                Bitmap aBitmap = mHttpImageManager.loadImage(new HttpImageManager.LoadRequest(Uri
                        .parse(mContactList.get(iPosition).getPhoto().getUrl()), aImageView));
                if (aBitmap != null) {
                    aImageView.setImageBitmap(aBitmap);
                }
            } else if (aFileToCheck.exists()) {
                Bitmap aBitmap = mHttpImageManager.loadImage(new HttpImageManager.LoadRequest(Uri
                        .parse(mContactList.get(iPosition).getID()), aImageView));
                if (aBitmap != null) {
                    aImageView.setImageBitmap(aBitmap);
                }

            }
        } catch (Exception iException) {
            iException.printStackTrace();
        }

        if (mContactList.get(iPosition).getFullName() != null) {
            aHolder.aContactName.setText(mContactList.get(iPosition).getFullName());
        } else {
            aHolder.aContactName.setText("No Name");
        }

        return iConvertView;
    }

    private class MyFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence iConstraint) {

            FilterResults aResult = null;
            try {
                iConstraint = iConstraint.toString().toLowerCase();
                aResult = new FilterResults();
                if (iConstraint != null && iConstraint.toString().length() > 0) {
                    ArrayList<VCard> aFilteredItems = new ArrayList<VCard>();

                    for (int i = 0, l = mOriginalList.size(); i < l; i++) {
                        VCard aList = mOriginalList.get(i);
                        if (aList.getFullName() != null) {
                            if (aList.getFullName().toString().toLowerCase().contains(iConstraint))
                                aFilteredItems.add(aList);
                        }
                    }
                    aResult.count = aFilteredItems.size();
                    aResult.values = aFilteredItems;
                } else {
                    synchronized (this) {
                        aResult.values = mOriginalList;
                        aResult.count = mOriginalList.size();
                    }
                }
            } catch (Exception iException) {
                iException.printStackTrace();
            }
            return aResult;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence iConstraint, FilterResults iResults) {
            try {
                mContactList = (ArrayList<VCard>)iResults.values;
                notifyDataSetChanged();
                clear();
                for (int i = 0, l = mContactList.size(); i < l; i++)
                    add(mContactList.get(i));
                notifyDataSetInvalidated();
            } catch (Exception iException) {
                iException.printStackTrace();
            }
        }
    }
}
package com.syncusup.list.adapters;
导入java.io.File;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.os.Environment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Filter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.syncusup.R;
导入com.syncusup.ui应用程序;
导入com.syncusup.httpimageloader.HttpImageManager;
导入com.syncusup.model.VCard;
导入com.syncusup.utils.SyncLocalDatabase;
公共类LocalContactsAdapter扩展了ArrayAdapter{
私人停车场;
私人ArrayList mOriginalList;
私有ArrayList mContactList;
私有HttpImageManager mHttpImageManager;
私人MyFilter;
私有上下文;
私有文件aFileToCheck;
公共LocalContactsAdapter(上下文iContext,ArrayList iVcardsArray){
超级(iContext,R.layout.localcontacts_row,iVcardsArray);
this.mContactList=新的ArrayList();
this.mContactList.addAll(iVcardsArray);
this.mOriginalList=新的ArrayList();
这个。莫里金纳利斯特。阿道尔(伊夫卡德萨雷);
this.mContext=iContext;
mHttpImageManager=((UILApplication)((活动)mContext.getApplication())
.getHttpImageManager();
}
私有类视窗持有者{
公共文本视图名称;
公共文本视图;
公共图像查看图像;
}
@凌驾
公共过滤器getFilter(){
if(mFilter==null){
mFilter=newmyfilter();
}
返回过滤器;
}
@凌驾
公共int getPosition(VCard iItem){
返回super.getPosition(项目);
}
@凌驾
public int getCount(){
返回mContactList.size();
}
@凌驾
公共VCard getItem(int iPosition){
返回mContactList.get(iPosition);
}
@凌驾
公共长getItemId(int-iPosition){
回位;
}
@凌驾
公共视图getView(最终整型iPosition、视图iConvertView、视图组iPart){
最终视窗支架;
aFileToCheck=新文件(Environment.getExternalStorageDirectory()+“/SyncUsUp/”,
SyncLocalDatabase.computeHashedName(mContactList.get(iPosition.getID());
if(iConvertView==null | | iConvertView.getTag()==null){
//默认布局充气器
mInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
iConvertView=mInflater.flate(R.layout.localcontacts\u行,空);
a支架=新的视图支架();
aHolder.aContactName=(TextView)iConvertView.findViewById(R.id.tvMyContactName);
aHolder.aContact=(TextView)iConvertView.findViewById(R.id.tvMyContact);
aHolder.aContactImage=(ImageView)iConvertView.findViewById(R.id.ivContact);
设置标签(一个文件夹);
}否则{
aHolder=(ViewHolder)iConvertView.getTag();
}
ImageView aImageView=aHolder.aContactImage;
aImageView.setImageResource(R.drawable.contact\u box\u blanktile);
试一试{
if(mContactList.get(iPosition.getPhoto()!=null){
位图aBitmap=mHttpImageManager.loadImage(新的HttpImageManager.LoadRequest(Uri
.parse(mContactList.get(iPosition.getPhoto().getUrl()),aImageView));
if(aBitmap!=null){
aImageView.setImageBitmap(aBitmap);
}
}else if(aFileToCheck.exists()){
位图aBitmap=mHttpImageManager.loadImage(新的HttpImageManager.LoadRequest(Uri
.parse(mContactList.get(iPosition.getID()),aImageView));
if(aBitmap!=null){
aImageView.setImageBitmap(aBitmap);
}
}
}捕获(异常IEException){
IEException.printStackTrace();
}
if(mContactList.get(iPosition.getFullName()!=null){
aHolder.aContactName.setText(mContactList.get(iPosition.getFullName());
}否则{
aHolder.aContactName.setText(“无名称”);
}
返回iConvertView;
}
私有类MyFilter扩展了过滤器{
@凌驾
受保护过滤器结果性能过滤(CharSequence iConstraint){
FilterResults aResult=null;
试一试{
iConstraint=iConstraint.toString().toLowerCase();
aResult=新过滤器results();
if(iConstraint!=null&&iConstraint.toString().length()>0){
ArrayList aFilteredItems=新的ArrayList();
for(inti=0,l=mOriginalList.size();i