所以,我有一个自定义的GalleryAdapter,我借助异步ImageLoading库通过ajax调用(lib name is Aquery)
从网络流式传输图像。
对于我从网络流式传输的图像,我也有相应的音轨,每个图像都必须在图像加载同时时异步调用。
即。
图片文件 - > http://myserver.com/img1.png
音轨 - > http://myserver.com/img1.mp3
第1点,我在自定义ImageAdapter
内执行此操作。我打电话给你
我的getView
方法中的另一个帖子?
我在做什么 - >得到getView()
方法
被称为 2次我可以控制它只被调用一次,因为它不应该因为轨道被多次播放
基于电话的时间?
这是我的自定义适配器类
private class MainImageAdapter extends ArrayAdapter<String> {
List<String> pagedImages;
private Context context;
public MainImageAdapter(Context context,int resid, List<String> objects ) {
super( context, resid, objects );
this.context=context;
this.pagedImages=objects;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pagedImages.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return pagedImages.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return pagedImages.get(position).hashCode();
}
@SuppressWarnings("deprecation")
public View getView(final int position, View convertView, ViewGroup parent) {
View v;
if ( convertView == null ) {
v = LayoutInflater.from(context).inflate(R.layout.imagebook, parent, false);
} else {
v = convertView;
}
System.out.println("getview called with"+position);
final ImageView im=(ImageView) v.findViewById(R.id.pagedimage);
positionMusic=position;
aq.id(im).image(pagedImages.get(position), true, true, 0, 0, new BitmapAjaxCallback(){
@Override
public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status){
iv.setImageBitmap(bm);
//This should be called only once somehow
mPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(pagedImages.get(position).replace(".png", ".mp3")));
mPlayer.start();
}
});
return v;
}
}
答案 0 :(得分:2)
getview()中有两个异步调用,我这样做了吗?
没有
我在自定义ImageAdapter中完成了这一切。我应该从我的getView方法中调用另一个线程吗?
Aquery正在启动另一个线程来进行下载,因此您只需复制已有的代码。当该线程完成其工作时,将调用BitmapAjaxCallback.callback
。
getView()方法被调用2次我是否可以控制它只被调用一次,因为它不应该根据其调用多次播放?
getView
必须被调用两次。第一次通话将返回View
,而不会从网络下载图像。第二次调用是在下载图像后可以附加的。只有在内存缓存中已有图像getView
时才会调用一次。你不想要的是BitmapAjaxCallback.callback
被叫两次。
图像下载完成后,你也在主线程上下载mp3。它们都应该在不同的线程上下载。同时。
解决方案提议:
当您Adapter
绑定到Activity
上下文并且下载图像和mp3并开始播放时不应该绑定到该短暂的上下文,请将其移至Application
上下文或{{1来自Service
的{{1}}只请求要完成的事情并从缓存中获取图像,缓存应放在Adapter
上下文中。也许Aquery有一些你可以使用的缓存。