`

回调接口方法简述

阅读更多
待实现的接口
	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(Android)打印接口说明文档-2018-03-20.pdf

    文档提供了详细的LPAPI接口使用说明,涵盖了对象创建、回调函数、打印机连接、打印任务管理以及各种图形绘制功能。 首先,文档介绍LPAPI接口文件的基本概述,它包括了整个接口提供的功能概览。其次,给出了LPAPI...

    WCF 服务协定:双工

    在上述代码中,服务在接收到`StartCommunication`请求时,会通过回调接口调用`ReceiveMessage`方法,将消息发送回客户端。客户端需要实现`ICallbackContract`接口并提供一个实现此接口的对象给服务,以便服务可以...

    Linux 信号signal处理机制

    - **处理函数**:进程可以通过`signal`系统调用来设置信号处理函数,例如捕获并处理特定信号。 - **信号掩码**:每个进程都有一个信号掩码,它定义了当前可以接收哪些信号。 - **信号的传播**:当父进程接收到...

    简述Android触摸屏手势识别

    开发者可以通过调用`setOnTouchListener()`方法为任何View子类设置监听器,以便在特定的触摸事件发生时接收回调。 `OnTouchListener`接口包含一个抽象方法`onTouch()`,该方法会在每次触摸事件发生时被调用。`...

    16.TradeX交易接口Python开发手册 v1.5.01

    手册的其他章节可能继续详细讨论其他函数,如查询历史数据、发送交易请求、处理回调事件等。通过这个手册,开发者可以学习如何有效地集成TradeX接口到自己的交易系统中,实现高效、可靠的交易功能。同时,手册也可能...

    桂林理工大学java程序设计期末试卷

    - **接口回调**: 接口回调指的是通过接口定义的方法来传递回调函数。这种方式允许程序员定义接口的实现细节,而调用者只关注接口定义的方法,不关心其实现。 **6. 比较抽象类与接口并说明面向抽象编程的目的与核心...

    Camera代码分析资料

    ICameraClient.h头文件用于描述一个Camera客户端的接口,定义了几个回调函数,例如shutterCallback、rawCallback和jpegCallback等,它们在相应动作发生的时候被调用。 Camera.h头文件是Camera对外的接口头文件,它...

    猿星人的修仙之路II

    5. **BeanFactoryAware 接口回调**:如果该 Bean 实现了 `BeanFactoryAware` 接口,Spring 将 BeanFactory 传递给 `setBeanFactory()` 方法。 6. **调用 BeanPostProcessor.postProcessBeforeInitialization 方法**...

    Effective C# 中文版改善C#程序的50种方法

    8. **理解并使用匿名方法和Lambda表达式**:这些简化了回调函数和事件处理程序的定义,使得代码更简洁。 9. **利用扩展方法增强类的功能**:在不改变原有类的情况下,通过扩展方法为其添加新功能。 10. **使用属性...

    Android组件的生命周期

    当Broadcast Receiver接收到Broadcast后,系统会回调`onReceive`方法,在其中执行特定的操作逻辑。 #### 二、Activity生命周期详解 Activity是Android应用程序中最常见的组件之一,其生命周期包括多个状态: - **...

    胡侃软件开发之C#的委托

    委托在C#编程中扮演着至关重要的角色,它是一种类型,代表了方法的引用,允许我们传递代码作为参数,执行回调操作,或者实现事件处理。本文将深入探讨C#中的委托,包括其定义、使用、多路广播委托、委托的协变与逆变...

    详解如何实现Laravel的服务容器的方法示例

    bind用于将一个名称和一个类或闭包(回调函数)关联起来,而make用于从服务容器中获取已经绑定的服务实例。 要实现服务容器,我们可以首先将其封装到一个类中。在这个类中,我们维护一个服务数组($instances),...

    Irrlicht Engine__API-Manual.pdf

    9. **`irr::scene::IAnimationEndCallBack`**:当动画结束时调用的回调接口。 10. **`irr::io::IAttributeExchangingObject`**:用于属性交换的对象接口。 11. **`irr::io::IAttributes`**:属性集接口,用于管理和...

    Matlab——GUI制作计算器、绘制函数曲线、打开图片

    3. **创建回调函数**:每个组件都可以有自己的回调函数,当用户与组件交互时(例如点击按钮),对应的回调函数会被调用。为每个按钮分配适当的回调函数,实现加、减、乘、除等运算。 4. **逻辑处理**:在回调函数中...

    Android 事件处理机制

    4. Message:Message是承载数据的对象,可以携带数据和回调函数。`what`字段通常用来标识消息类型,`arg1`和`arg2`可以存储小整型数据,`obj`可以存放任意类型的数据。 三、事件拦截与消费 1. `...

    ecshop总结和笔记

    遇到支付接口问题时,需检查API配置是否正确,包括商户ID、密钥、回调地址等,并确保接口文档与实际接口调用一致。 3. **商品管理**:商品上传后无法显示或显示异常,可能是图片路径问题,或者是商品属性设置错误。...

    java多线程,高并发面试题.pdf

    线程可以注册一个回调函数来处理结果,或者使用更现代的机制如 `CompletableFuture`。 - **应用场景**:当程序执行某些长时间运行的任务时,如网络请求或数据库查询,使用异步可以提高整体性能和响应性。 #### 四...

    两种方案处理运行时权限

    2. **请求权限**:如果权限未被授予,应用需要通过`ActivityCompat.requestPermissions()`方法向用户请求权限,并提供一个回调接口`RequestPermissionsResultCallback`来处理用户的响应。 3. **处理用户响应**:当...

    本地服务和Activity交互

    6. **ResultReceiver**: 服务可以通过ResultReceiver将执行结果回调给Activity。这种方式适用于服务需要向Activity返回结果的情况。 7. **使用 Messenger 或 AIDL**: 这两者都是实现IPC的方式,通常用于跨进程的...

Global site tag (gtag.js) - Google Analytics