【发布时间】:2013-05-09 07:39:06
【问题描述】:
所以,我有一个自定义 GalleryAdapter,我在 Async ImageLoading Library 的帮助下通过 ajax 调用 (lib name is Aquery) 从网络流式传输图像。
对于我从网络上流式传输的图像,我也有一个对应的音轨,每个图像都有,因此当图像加载时必须异步调用同时。
即
-
第 1 点,我在我的自定义
ImageAdapter中完成了这一切。我要打电话吗 我的getView方法中的另一个线程? -
我在做什么 ->
getView()方法得到 被调用 2 次strong> 我可以控制它只被调用一次吗,因为它不应该被多次播放 根据它的调用次数?
这是我的自定义适配器类
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;
}
}
【问题讨论】:
-
我不知道那个库,但你的代码应该知道是否已经为该行启动了检索任务。关于新线程,库很可能会处理此问题并使用后台线程,否则您的应用程序应该会非常慢。
-
如果我可以控制getView在我滑动图库时只调用一次,我现在面临的实际问题就可以解决。由于我已将膨胀布局的宽度和高度设置为
fill_parent,因此我希望它只运行一次,但它没有发生。
标签: android android-adapter android-query