Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 如何在异步映像加载的自定义适配器中返回列表项视图_Android - Fatal编程技术网

Android 如何在异步映像加载的自定义适配器中返回列表项视图

Android 如何在异步映像加载的自定义适配器中返回列表项视图,android,Android,因此,我在自定义列表适配器中设置了一个视图保持架 static class ViewHolder { static TextView album; static TextView artist; static TextView title; static TextView duration; static ImageView albumArt; } 我能够毫不费力地适应文本视图。以下是代码摘要: // Set view holder referen

因此,我在自定义列表适配器中设置了一个视图保持架

static class ViewHolder {

    static TextView album;
    static TextView artist;
    static TextView title;
    static TextView duration;

    static ImageView albumArt;

}
我能够毫不费力地适应文本视图。以下是代码摘要:

// Set view holder references 

viewHolder.album = (TextView) convertView.findViewById(R.id.album);
viewHolder.artist = (TextView) convertView.findViewById(R.id.artist);
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.albumArt = (ImageView) convertView.findViewById(R.id.album_art);
viewHolder.duration = (TextView) convertView.findViewById(R.id.duration);

// Set values to referenced view objects 

viewHolder.album.setText(songObject.album);
viewHolder.artist.setText(songObject.artist);
viewHolder.title.setText(songObject.title);
SongHolder.duration.setText( /** Some Code **/ )
viewHolder.albumArt.setImageBitmap(BitmapFactory.decodeFile(songObject.albumArtURI));

// Return the converted view

return convertView;
然而,相册艺术阻止了主UI线程以平滑方式滚动列表,因此我尝试异步加载相册艺术。现在有可能在专辑艺术中做类似的事情吗

而不是这样做

viewHolder.albumArt.setImageBitmap(BitmapFactory.decodeFile(songObject.albumArtURI));
我这样做

ImageLoader(viewHolder);
或者我可以像这样传递物体的一部分吗

ImageLoader(viewHolder.albumArt);
 public static class ViewHolder {
        ImageView img_Coach;
        TextView tv_coach;
   }

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

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater)
                    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.listview_row, null);
            holder = new ViewHolder();
            holder.img_Coach = (ImageView) convertView.findViewById(R.id.img_coach);
            holder.tv_coach = (TextView) convertView.findViewById(R.id.tv_coach);

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

        holder.tv_coach.setText(name);
        Glide.with(mActivity)
                .load(urlimage)
                .centerCrop()
                .placeholder(R.drawable.home_no_image)
                .crossFade()
                .into(holder.img_Coach);

        return convertView;
    }
这边怎么样

 viewHolder.albumArt.setImageBitmap(ImageLoader(AlbumArtURI))
一旦我实现了一个合适的异步映像加载器,这些方法中的任何一个都可以工作吗

谢谢

我能给你提个建议吗?它会帮你完成所有的工作

下面是我用来将图像加载到列表适配器的一段代码:

    public ListAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
    }

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

        View v = super.getView(position, convertView, parent);
        ImageView img = (ImageView) v.getTag();

        if(img == null) {
            img = (ImageView) v.findViewById(R.id.thumbnail);
            v.setTag(img);
        }
            // get the url from the data you passed to the `Map`
            //String url = ((Map) getItem(position)).get();
            String url =  ((Map<String, String>)getItem(position)).get("imagem");
            // do Picasso
            Picasso.with(v.getContext()).load(url).fit().into(img);

            // return the view
            return v;
        }
}
公共ListAdapter(上下文上下文,列表>数据,int资源,字符串[]从,int[]到){
超级(上下文、数据、资源、从、到);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=super.getView(位置、转换视图、父级);
ImageView img=(ImageView)v.getTag();
如果(img==null){
img=(ImageView)v.findViewById(R.id.缩略图);
v、 setTag(img);
}
//从传递到地图的数据中获取url`
//字符串url=((映射)getItem(位置)).get();
字符串url=((Map)getItem(position)).get(“imagem”);
//你喜欢毕加索吗
毕加索.with(v.getContext()).load(url).fit().into(img);
//返回视图
返回v;
}
}

使用本教程使用ViewHolder模式进行平滑滚动

使用异步映像加载库

使用ViewHolder模式并像这样滑动

ImageLoader(viewHolder.albumArt);
 public static class ViewHolder {
        ImageView img_Coach;
        TextView tv_coach;
   }

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

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater)
                    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.listview_row, null);
            holder = new ViewHolder();
            holder.img_Coach = (ImageView) convertView.findViewById(R.id.img_coach);
            holder.tv_coach = (TextView) convertView.findViewById(R.id.tv_coach);

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

        holder.tv_coach.setText(name);
        Glide.with(mActivity)
                .load(urlimage)
                .centerCrop()
                .placeholder(R.drawable.home_no_image)
                .crossFade()
                .into(holder.img_Coach);

        return convertView;
    }

声明ViewHolder ViewHolder=null全局。在getView()=>viewHolder=新的viewHolder()中;是的,当您有合适的异步映像加载器@ρ砦σρѕρєK时,这两种方法都会起作用。这个呢
viewHolder.albumArt.setImageBitmap(ImageLoader(AlbumArtURI))
我尝试使用通用图像加载器,但似乎需要更多的工作来确定如何使用,另外,当我尝试尽可能降低时,最低API级别是21。。。也许如果API级别足够低,或者它有一个支持库之类的,那么我可以使用它。。。