在ListView适配器(Android Studio)中使用AsyncTask

在ListView适配器(Android Studio)中使用AsyncTask,android,android-adapter,Android,Android Adapter,我正在开发一个应用程序,我正在使用列表视图适配器为列表视图项充气。我所观察到的是,我的GUI并没有那个么灵敏,因为我在我的每个列表项中膨胀了图像视图和文本视图。项目的数量取决于用户设备中的图像数量。所以它做了很多工作,我也收到了这样的信息:“跳过了~63帧…” 下面是名为adapter_photofolder.java的列表视图适配器类文件的完整代码: public class Adapter_PhotosFolder extends ArrayAdapter<Model_images&g

我正在开发一个应用程序,我正在使用列表视图适配器为列表视图项充气。我所观察到的是,我的GUI并没有那个么灵敏,因为我在我的每个列表项中膨胀了图像视图和文本视图。项目的数量取决于用户设备中的图像数量。所以它做了很多工作,我也收到了这样的信息:“跳过了~63帧…”

下面是名为adapter_photofolder.java的列表视图适配器类文件的完整代码:

public class Adapter_PhotosFolder extends ArrayAdapter<Model_images> {

    Context context;
    ViewHolder viewHolder;
    ArrayList<Model_images> al_menu = new ArrayList<>();


    public Adapter_PhotosFolder(Context context, ArrayList<Model_images> al_menu) {
        super(context, R.layout.adapter_photosfolder, al_menu);
        this.al_menu = al_menu;
        this.context = context;


    }

    @Override
    public int getCount() {

        //Log.e("ADAPTER LIST SIZE", al_menu.size() + "");
        return al_menu.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        if (al_menu.size() > 0) {
            return al_menu.size();
        } else {
            return 1;
        }
    }

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


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {

            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_photosfolder, parent, false);
            viewHolder.tv_foldern = (TextView) convertView.findViewById(R.id.apftv1);
            viewHolder.tv_foldersize = (TextView) convertView.findViewById(R.id.apftv2);
            viewHolder.iv_image = (ImageView) convertView.findViewById(R.id.apfiv);


            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.tv_foldern.setText(al_menu.get(position).getStr_folder());
        viewHolder.tv_foldersize.setText(al_menu.get(position).getAl_imagepath().size()+"");


        Glide.with(context).load(al_menu.get(position).getAl_imagepath().get(0))
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .skipMemoryCache(true)
                .into(viewHolder.iv_image);

        return convertView;

    }

    private static class ViewHolder {
        TextView tv_foldern, tv_foldersize;
        ImageView iv_image;
    }


}

公共类适配器\u文件夹扩展了ArrayAdapter{
语境;
持票人持票人;
ArrayList al_菜单=新建ArrayList();
公用适配器文件夹(上下文上下文,ArrayList al_菜单){
超级(上下文,R.layout.adapter\u文件夹,al\u菜单);
this.al_menu=al_menu;
this.context=上下文;
}
@凌驾
public int getCount(){
//Log.e(“适配器列表大小”,al_menu.SIZE()+”);
返回al_menu.size();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
public int getViewTypeCount(){
如果(al_menu.size()>0){
返回al_menu.size();
}否则{
返回1;
}
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutInflater.from(getContext()).flate(R.layout.adapter\u photofolder,parent,false);
viewHolder.tv_foldern=(TextView)convertView.findViewById(R.id.apftv1);
viewHolder.tv_foldersize=(TextView)convertView.findViewById(R.id.apftv2);
viewHolder.iv_image=(ImageView)convertView.findViewById(R.id.apfiv);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.tv_foldern.setText(al_menu.get(position.getStr_folder());
viewHolder.tv_foldersize.setText(al_菜单.get(位置).getAl_图像路径().size()+);
Glide.with(context).load(al_菜单.get(位置).getAl_图像路径().get(0))
.diskCacheStrategy(diskCacheStrategy.NONE)
.skipMemoryCache(真)
.into(viewHolder.iv_图像);
返回视图;
}
私有静态类视图持有者{
TextView tv_foldern,tv_foldersize;
ImageView iv_图像;
}
}
如果我没有错的话,我们可以使用线程或者最好是异步任务来避免GUI冻结。我不知道如何在我的案例中实现这一点

我的问题:您能告诉我如何在我的案例中使用AsynTask使其平滑吗


谢谢。

您可以使用异步任务。在doInBackground中创建位图。将位图放置在onPostExecute()的UI中。您也可以使用线程获取位图并使用runOnUiThread放置位图。但是其他人会告诉您必须使用Glide或其他库。我会尝试一下,然后再与您联系。感谢没有解决我的问题@blackapps。它还是有点僵硬。顺便说一下,我已经在使用glide了。您可以使用asynctask。在doInBackground中创建位图。将位图放置在onPostExecute()的UI中。您也可以使用线程获取位图并使用runOnUiThread放置位图。但是其他人会告诉您必须使用Glide或其他库。我会尝试一下,然后再与您联系。感谢没有解决我的问题@blackapps。它还是有点僵硬。顺便说一下,我已经在使用glide了。