待实现的接口
public interface ImageCallback {
void imageLoad(Drawable image,String imageUrl);
}
回调接口的方法
//参数有一个实现回调接口的imageCallback对象
public Drawable loadDrawable(final String imageUrl,final ImageCallback imageCallback){
Log.i("AsyncLoadImage", "loadDrawable()"+imageUrl);
//如果缓存中有则从缓存中取出来
if(imageCache.containsKey(imageUrl)){
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
if(softReference.get()!=null){//判断是否有drawable
return softReference.get(); //有则返回
}
}
//使用线程池下载图片
executorService.submit(new Runnable(){
@Override
public void run() {
try {
// final Drawable drawable = Drawable.createFromStream(new URL(imageUrl).openStream(), "image.jpg");
final Drawable drawable = getDrawableFormUrl(imageUrl); //调用获取数据的方法
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));//将加载的图片放入到内存中
mHandler.post(new Runnable(){
@Override
public void run() {
//调用回调接口的方法,已由imageCallback实现!
imageCallback.imageLoad(drawable,imageUrl);//接口回调
}
});
} catch (Exception e) {
throw new RuntimeException();
}
}
});
return null ;
}
一个列表适配器的getview方法,已重写
@Override
public View getView( int position, View convertView, ViewGroup parent) {
Log.i(TAG, "getView()");
if(convertView == null){
//获取布局
convertView = LayoutInflater.from(cext).inflate(R.layout.item_image, null);
//获取布局里面的ImageView组件
final ImageView imageView = (ImageView)convertView.findViewById(R.id.item_imageView);
//获取当前的图片的url地址
final String url = urlList.get(position).getImageUrl();
//为图片设置一个tag 这个很重要这样的目的是为了控制每个ImageView组件都显示对应的图片
imageView.setTag(url);
Log.i(TAG, "初始化"+(position));
//开始异步加载图片
//[color=red]实例化一个实现接口的对象,供上一段代码loadDrawable调用[/color]
Drawable drawable = asyncLoadImage.loadDrawable(url, new AsyncLoadImage.ImageCallback(){
@Override
public void imageLoad(Drawable image,String imageUrl) {
//判断当前的url地址是否为当前组件的url地址 是则加载图片
if(imageUrl.equals(imageView.getTag())){
imageView.setImageDrawable(image);
}
}
});
}else{
Log.i(TAG, "完成后的初始化"+(position));
final ImageView imageView = (ImageView)convertView.findViewById(R.id.item_imageView);
final String url = urlList.get(position).getImageUrl();
imageView.setTag(url);
Drawable drawable = asyncLoadImage.loadDrawable(url, new AsyncLoadImage.ImageCallback(){
@Override
public void imageLoad(Drawable image,String imageUrl) {
if(imageUrl.equals(imageView.getTag())){
imageView.setImageDrawable(image);
}
}
});
}
return convertView;
}
分享到:
相关推荐
文档提供了详细的LPAPI接口使用说明,涵盖了对象创建、回调函数、打印机连接、打印任务管理以及各种图形绘制功能。 首先,文档介绍LPAPI接口文件的基本概述,它包括了整个接口提供的功能概览。其次,给出了LPAPI...
在上述代码中,服务在接收到`StartCommunication`请求时,会通过回调接口调用`ReceiveMessage`方法,将消息发送回客户端。客户端需要实现`ICallbackContract`接口并提供一个实现此接口的对象给服务,以便服务可以...
- **处理函数**:进程可以通过`signal`系统调用来设置信号处理函数,例如捕获并处理特定信号。 - **信号掩码**:每个进程都有一个信号掩码,它定义了当前可以接收哪些信号。 - **信号的传播**:当父进程接收到...
开发者可以通过调用`setOnTouchListener()`方法为任何View子类设置监听器,以便在特定的触摸事件发生时接收回调。 `OnTouchListener`接口包含一个抽象方法`onTouch()`,该方法会在每次触摸事件发生时被调用。`...
手册的其他章节可能继续详细讨论其他函数,如查询历史数据、发送交易请求、处理回调事件等。通过这个手册,开发者可以学习如何有效地集成TradeX接口到自己的交易系统中,实现高效、可靠的交易功能。同时,手册也可能...
- **接口回调**: 接口回调指的是通过接口定义的方法来传递回调函数。这种方式允许程序员定义接口的实现细节,而调用者只关注接口定义的方法,不关心其实现。 **6. 比较抽象类与接口并说明面向抽象编程的目的与核心...
ICameraClient.h头文件用于描述一个Camera客户端的接口,定义了几个回调函数,例如shutterCallback、rawCallback和jpegCallback等,它们在相应动作发生的时候被调用。 Camera.h头文件是Camera对外的接口头文件,它...
5. **BeanFactoryAware 接口回调**:如果该 Bean 实现了 `BeanFactoryAware` 接口,Spring 将 BeanFactory 传递给 `setBeanFactory()` 方法。 6. **调用 BeanPostProcessor.postProcessBeforeInitialization 方法**...
8. **理解并使用匿名方法和Lambda表达式**:这些简化了回调函数和事件处理程序的定义,使得代码更简洁。 9. **利用扩展方法增强类的功能**:在不改变原有类的情况下,通过扩展方法为其添加新功能。 10. **使用属性...
当Broadcast Receiver接收到Broadcast后,系统会回调`onReceive`方法,在其中执行特定的操作逻辑。 #### 二、Activity生命周期详解 Activity是Android应用程序中最常见的组件之一,其生命周期包括多个状态: - **...
委托在C#编程中扮演着至关重要的角色,它是一种类型,代表了方法的引用,允许我们传递代码作为参数,执行回调操作,或者实现事件处理。本文将深入探讨C#中的委托,包括其定义、使用、多路广播委托、委托的协变与逆变...
bind用于将一个名称和一个类或闭包(回调函数)关联起来,而make用于从服务容器中获取已经绑定的服务实例。 要实现服务容器,我们可以首先将其封装到一个类中。在这个类中,我们维护一个服务数组($instances),...
9. **`irr::scene::IAnimationEndCallBack`**:当动画结束时调用的回调接口。 10. **`irr::io::IAttributeExchangingObject`**:用于属性交换的对象接口。 11. **`irr::io::IAttributes`**:属性集接口,用于管理和...
3. **创建回调函数**:每个组件都可以有自己的回调函数,当用户与组件交互时(例如点击按钮),对应的回调函数会被调用。为每个按钮分配适当的回调函数,实现加、减、乘、除等运算。 4. **逻辑处理**:在回调函数中...
4. Message:Message是承载数据的对象,可以携带数据和回调函数。`what`字段通常用来标识消息类型,`arg1`和`arg2`可以存储小整型数据,`obj`可以存放任意类型的数据。 三、事件拦截与消费 1. `...
遇到支付接口问题时,需检查API配置是否正确,包括商户ID、密钥、回调地址等,并确保接口文档与实际接口调用一致。 3. **商品管理**:商品上传后无法显示或显示异常,可能是图片路径问题,或者是商品属性设置错误。...
线程可以注册一个回调函数来处理结果,或者使用更现代的机制如 `CompletableFuture`。 - **应用场景**:当程序执行某些长时间运行的任务时,如网络请求或数据库查询,使用异步可以提高整体性能和响应性。 #### 四...
2. **请求权限**:如果权限未被授予,应用需要通过`ActivityCompat.requestPermissions()`方法向用户请求权限,并提供一个回调接口`RequestPermissionsResultCallback`来处理用户的响应。 3. **处理用户响应**:当...
6. **ResultReceiver**: 服务可以通过ResultReceiver将执行结果回调给Activity。这种方式适用于服务需要向Activity返回结果的情况。 7. **使用 Messenger 或 AIDL**: 这两者都是实现IPC的方式,通常用于跨进程的...