我正在开发一个Android应用程序,它可以执行多个异步连接以实现Spotify和我自己的服务器。我的问题是,当我加载曲目时,我必须等待图像在ImageView中显示。这是应用程序流程:
这就是我的问题。我尝试将Track保存为ImageView的属性,以便在收到DownloadImageTask时,将接收到的Bitmap设置为ImageView的setImageBitmap函数。但就在那里,ImageView为null,因此,我无法将Image设置为对象。
当创建列表以将指针发送到ImageView时,我正在考虑回调,但无法找到方法。否则,如果你给我一个想法,我可以尝试另一种方式。
我可以按需发布代码(这几乎是代码,我不想用很多无用的代码提出一个很好的问题)。
提前致谢。
适配器代码:
public class ContinueListAdapter extends ArrayAdapter<MyTrack> {
private int layoutResource;
public ContinueListAdapter(Context context, int layoutResource, List<MyTrack> tracksList){
super(context, layoutResource, tracksList);
this.layoutResource = layoutResource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
view = layoutInflater.inflate(layoutResource, null);
}
MyTrack theTrack = getItem(position);
if (theTrack != null) {
TextView userData = (TextView) view.findViewById(R.id.userData);
TextView trackData = (TextView) view.findViewById(R.id.trackData);
ImageView albumImage = (ImageView) view.findViewById(R.id.albumImage);
userData.setText("Petición de: " + theTrack.getUserName());
trackData.setText(theTrack.getSongName()+" / "+theTrack.getAlbumName());
albumImage.setImageBitmap(theTrack.getBitmap()); //I did this first with the hope of getting the image when it was downloaded, no way.
theTrack.setImageView(albumImage); //So I passed the ImageView to a property of the Track object, but the ImageView reference is null
}
return view;
}
}
答案 0 :(得分:2)
使用Glide或Picasso库代替处理图像。您将通过3-5行代码进行后台下载,图像缓存,缩放以及这些库处理的所有内容。
但是ImageView为null,因此,我无法对图像进行设置
即使您下载完成后的目标图像视图已经消失,您很可能希望很快再次显示该图像(即用户将返回到您的活动或列表行将滚动回屏幕) - 因为那个缓存,下次你引用同一个图像时会从那里提供服务。