`

回调接口方法简述

阅读更多
待实现的接口
	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;
	}
分享到:
评论

相关推荐

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件) 161 5.3 复合控件的...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    5.2.2 客户端回发/回调揭密150 5.2.3 回传数据处理接口ipostbackdatahandler153 5.2.4 正确处理继承基类中控件的事件159 5.2.5 扩展kingtextbox控件功能(kingtextboxcanpostevent控件)161 5.3 复合控件的事件...

    超级有影响力霸气的Java面试题大全文档

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用...

    java 面试题 总结

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用...

    J2EE面试题

    c) NotSupported方式在容器回调OnMessage方法之后才启动事务 d) MDB不支持Required事务属性 参考答案 21) 关于WSDL不正确的说法是 bc a a) 用来描述Web服务的XML文件 b) 全称是WEB SERVICES DEFINITION ...

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

    网络驱动程序设计指南

    目录 网络驱动程序设计指南 1 第一部分 网络驱动程序 2 ...第四章 TDI例程、宏和回调 251 4.1 TDI驱动程序初始化 251 4.1.1 注册TDI传输驱动程序 252 4.1.2 卸载和注销TDI传输驱动程序 252 4.2 TDI...

    Android中fragment与activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文《详解Android中Fragment的两种创建方式》,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道...

    Android驱动开发权威指南

    11.1.3使用回调函数作为异步访问的通知 11.1.4异步访问与设备驱动 11.2异步Fifo驱动例子 11.2.1在virtualfifo驱动中增加异步通知 11.2.2在用户空间验证virtualfifo的异步通知 第12章Linux块设备驱动 12.1块设备的I/O...

    win2000驱动程序设计指南

    IrDA微端口NIC驱动程序 178 13.1 IrDA微端口驱动程序简述 178 13.2 IrDA体系结构 179 13.3 IrDA协议驱动程序 179 13.4 IrDA介质特征 179 13.4.1 通信连接速度 180 13.4.2 通信连接回转时间 180...

    OPCDA服务器与客户程序开发指南修订版

    3.3 用于客户端的回调定义................................................................. 53 3.4 OPC服务器的设计及初步实现..................................................... 55 3.5 OPC服务器的...

    python入门到高级全栈工程师培训 第3期 附课件代码

    08 接口继承与归一化设计 09 继承顺序之mro线性顺序列表 10 在python2中的继承顺序是什么 11 在子类中调用父类方法 12 super调用父类的方法 13 选择系统作业讲解 第26章 01 学生自主复习 02 分享列表 03 多态 04 ...

Global site tag (gtag.js) - Google Analytics