[color=red][size=medium]介绍:使用FunDapter之后,你就无须为每一个视图创建对应的Adapter,这是一种新的创建adapter的自定义方法,无须创建ViewHolder就可以使用ViewHolder模式,不仅可以减少代码中bug,并且可以使代码更整洁。[/size][/color]
[b][size=medium]以前我们使用Listview adapter 时,需要做:[/size][/b][list]
[*]继承BaseAdapter或者复制其他已经写过的Adapter
[*]创建ViewHolder类并且定义所有View
[*]写(复制.. 你TM还在骗自己!) 整个ViewHolder创建代码
[*]写出所有 "findViewById" .
[*]开始在getView方法里面填充数据
[/list]
[b][size=medium]现在使用FunDapter,你只需要:[/size][/b][list]
[*]创建一个 BindDictionary
[*]加入字段Add fields.
[*]实例化一个新的FunDapter,补充完整BindDictionary, 布局源文件和列表项
[/list]
接下来看看代码中的实现
[size=medium][color=blue]1.创建一个对象Product,数据源[/color][/size]
[color=blue][size=medium]2.创建一个BindDictionary实现:[/size][/color]
[color=blue][size=medium]3.加入基础的text字段:[/size][/color]
(只需要提供text字段id,以前确认id对应对象Product的相应属性)
[color=blue][size=medium]4.来一个高级功能:[/size][/color]
(你能做一些更复杂的操作,比如设置字体(typeface()),加入visibilityIfNull() 则可以当属性为空时设置视图不可见.)
[color=blue][size=medium]5.什么,你需要加载图片,一样没问题:[/size][/color]
(在StringExtractor里面返回对象Product的图片URL,你可以在loadDynamicImage里得到该URL与ImageView,并实现图片懒加载)
[color=blue][size=medium]6.最后,创建适配器:[/size][/color]
大功告成,你只需要把该adapter添加到listView则可。
注:
该项目需要依赖一些文件,本人已打包成jar包(见博客附件),直接放到libs则可。
附上该框架github地址:[url]https://github.com/amigold/FunDapter[/url]
[b][size=medium]以前我们使用Listview adapter 时,需要做:[/size][/b][list]
[*]继承BaseAdapter或者复制其他已经写过的Adapter
[*]创建ViewHolder类并且定义所有View
[*]写(复制.. 你TM还在骗自己!) 整个ViewHolder创建代码
[*]写出所有 "findViewById" .
[*]开始在getView方法里面填充数据
[/list]
[b][size=medium]现在使用FunDapter,你只需要:[/size][/b][list]
[*]创建一个 BindDictionary
[*]加入字段Add fields.
[*]实例化一个新的FunDapter,补充完整BindDictionary, 布局源文件和列表项
[/list]
接下来看看代码中的实现
[size=medium][color=blue]1.创建一个对象Product,数据源[/color][/size]
public class Product {
public String title;
public String description;
public String imageUrl;
public double price;
}
[color=blue][size=medium]2.创建一个BindDictionary实现:[/size][/color]
BindDictionary<Product> dict = new BindDictionary<Product>();
[color=blue][size=medium]3.加入基础的text字段:[/size][/color]
(只需要提供text字段id,以前确认id对应对象Product的相应属性)
dict.addStringField(R.id.description,
new StringExtractor<Product>() {
@Override
public String getStringValue(Product item, int position) {
return item.description;
}
});
[color=blue][size=medium]4.来一个高级功能:[/size][/color]
(你能做一些更复杂的操作,比如设置字体(typeface()),加入visibilityIfNull() 则可以当属性为空时设置视图不可见.)
dict.addStringField(R.id.title,
new StringExtractor<Product>() {
@Override
public String getStringValue(Product item, int position) {
return item.title;
}
}).typeface(myBoldFace).visibilityIfNull(View.GONE);
[color=blue][size=medium]5.什么,你需要加载图片,一样没问题:[/size][/color]
(在StringExtractor里面返回对象Product的图片URL,你可以在loadDynamicImage里得到该URL与ImageView,并实现图片懒加载)
prodDict.addDynamicImageField(R.id.productImage,
new StringExtractor<Product>() {
@Override
public String getStringValue(Product item, int position) {
return item.imageUrl;
}
}, new DynamicImageLoader() {
@Override
public void loadDynamicImage(String url, ImageView view) {
//使用一些异步图片加载框架加载图上,比如Android-Universal-Image-Loader
}
});
[color=blue][size=medium]6.最后,创建适配器:[/size][/color]
FunDapter<Product> adapter = new FunDapter<Product>(getActivity(), productArrayList,
R.layout.product_list_item, dict);
大功告成,你只需要把该adapter添加到listView则可。
注:
该项目需要依赖一些文件,本人已打包成jar包(见博客附件),直接放到libs则可。
附上该框架github地址:[url]https://github.com/amigold/FunDapter[/url]