`
大头K
  • 浏览: 183228 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FunDapter--让你简单创建ListView Adapter

阅读更多
介绍:使用FunDapter之后,你就无须为每一个视图创建对应的Adapter,这是一种新的创建adapter的自定义方法,无须创建ViewHolder就可以使用ViewHolder模式,不仅可以减少代码中bug,并且可以使代码更整洁。


以前我们使用Listview adapter 时,需要做:
  • 继承BaseAdapter或者复制其他已经写过的Adapter
  • 创建ViewHolder类并且定义所有View
  • 写(复制.. 你TM还在骗自己!) 整个ViewHolder创建代码
  • 写出所有 "findViewById" .
  • 开始在getView方法里面填充数据

现在使用FunDapter,你只需要:
  • 创建一个 BindDictionary
  • 加入字段Add fields.
  • 实例化一个新的FunDapter,补充完整BindDictionary, 布局源文件和列表项


接下来看看代码中的实现
1.创建一个对象Product,数据源
public class Product {

    public String title;
    public String description;
    public String imageUrl;
    public double price;
}


2.创建一个BindDictionary实现:
BindDictionary<Product> dict = new BindDictionary<Product>();


3.加入基础的text字段:
(只需要提供text字段id,以前确认id对应对象Product的相应属性)
dict.addStringField(R.id.description,
    new StringExtractor<Product>() {

        @Override
        public String getStringValue(Product item, int position) {
            return item.description;
        }
    });


4.来一个高级功能:
(你能做一些更复杂的操作,比如设置字体(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);


5.什么,你需要加载图片,一样没问题:
(在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
        }

    });


6.最后,创建适配器:
FunDapter<Product> adapter = new FunDapter<Product>(getActivity(), productArrayList,
        R.layout.product_list_item, dict);


大功告成,你只需要把该adapter添加到listView则可。

注:
该项目需要依赖一些文件,本人已打包成jar包(见博客附件),直接放到libs则可。
附上该框架github地址:https://github.com/amigold/FunDapter
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics