首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

重写SimpleAdapter, 使它更而向对象

2012-06-30 
重写SimpleAdapter, 使它更而向对象。前言第一次用SimpleAdapter向LiveView加数据的时候,觉得使用ListMap

重写SimpleAdapter, 使它更而向对象。
前言
第一次用SimpleAdapter向LiveView加数据的时候,觉得使用List<Map>作为数据源怪怪的。
Google这样的设计也可以理解,因为使用Map的话,数据取值的时候确实比使用对象时更快,因为如果设计成自定义对象,取值时必定使用到反射,对移动设备来讲,使用反射的代价我想是比较高的。

另外好在Android是开源的,不然跟本无法重写这类对象,从而达到我们想要的效果。

下面我们使用反射机制来实现对自定义对象的支持。声明:本人绝对不会使用这种自定义对象的。因为反射的代价太大,这个重写只作研究之用。

下面代码与原SimpleAdapter不同的地方都使用了注释。



//反射类。public class Reflect {public static Object ref(Object obj, String fieldname){try{String[] fieldarray = fieldname.split("\\.");if (fieldarray.length > 1)return getValue(obj, fieldname);int length = fieldarray.length;Object objtemp = obj;for(int i = 0; i < length; i++){objtemp = getValue(objtemp, fieldarray[i]);if (i == length - 1 || objtemp == null)return objtemp;}}catch (Exception E){System.out.println(E.getMessage());}return null;}@SuppressWarnings("unchecked")private static Object getValue(Object obj, String fieldname){Class cls = obj.getClass();Object returnobj = null;try{Field field = cls.getField(fieldname);returnobj = field.get(obj);}catch (Exception E){}try{Method method = cls.getMethod(fieldname);returnobj = method.invoke(obj);}catch (Exception E){}return returnobj;}}


欢迎大家加Q讨论:87648714

热点排行