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级别足够低,或者它有一个支持库之类的,那么我可以使用它。。。