dhroid框架介绍之一

来源:互联网 发布:caffe.io.transformer 编辑:程序博客网 时间:2024/05/23 14:21

         今天想记录一下牛逼的dhroid框架,今天上班的时候小小抽空研究了一下,简直是卧槽卧槽,太牛逼,太强大了,深深的爱上了它。

         当时看上它就是因为它对Adapter的深度优化,让我欲罢不能,当然还有其他很多非常优秀和可取的地方,今天我就只想说说它的adapter简直是颠覆我的三观啊,先看看我写的东西效果如下:

         像这样子的一个页面,要放在以前的话要继承BaseAdapter,然后重写里面的几个方法,还要在里面写一个类部类用来优化listView滚动,还要写一个实体类解析的时候放进去,还要请求,请求回来的进行解析,并且如果有下拉刷新和上拉加载又要写好多逻辑判断,现在如果我告诉你有一个东西只要十行代码不到就可以搞定你是不是很兴奋,不兴奋的都拉出去枪毙了,哈哈哈开玩笑,我们要学会在巨人的肩膀上去做事,别自己跟自己过不去,接下来就贴一下代码如下:

    public void initAdapter() {    adapter = new NetJSONAdapter(url, this, R.layout.adapter_item);    //数据绑定adapter.addField("nickname", R.id.name);adapter.addField("area", R.id.title);//数据绑定 进行文本修饰adapter.addField("age", R.id.age, MyValueFixer.age);//数据绑定 进行图片修饰adapter.addField("avatar", R.id.pic, MyValueFixer.pic_round);adapter.refresh();adapter.useCache(CachePolicy.POLICY_CACHE_AndRefresh);adapter.showProgressOnFrist(true);listView.setAdapter(adapter);    }

         上面短短几行代码已经包含了请求,解析,adapter实现,是不是超级简单,仔细想想要是我以前全部是用这个框架去写项目了的话,我的所有项目完成肯定唰唰唰的快。哎,搞得我像是给他们打广告的了,其实我真不是,好想找他们收广告费啊,好了接下来说说代码绑定addField有好几个重载方法,第一个就是数据绑定第一个参数是从哪一个返回数据字段获取值,对应的是布局里面的哪一个textView,这个看不懂的可以撞墙去了,使用这个

adapter.addField("nickname", R.id.name);重载方法一般在于想把服务器返回的某个字段直接显示不加任何修饰如果你想在服务器返回字段前面加一个修饰字符比如服务器返回仅仅是数字40,但是你要在前面加一个修饰“年龄:”如上图,adapter.addField("age", R.id.age, MyValueFixer.age);就是你自己在ValueFix随意定义的个字符串接下来我们就可以我们重写ValueFix里面的fix方法如下(你妹,你不是说十行搞定的么,怎么还要写代码,呵呵仔细数数,加上三行代码刚刚好十行):
@Overridepublic Object fix(Object o, String type) {if (o == null)return null;if("age".equals(type)) {return "年龄:" + o.toString();}return o;}

是不是只有三行一个if判断,如果你后面还有其他赋值想修饰的话,只需要在这里加上三行代码就可以了。

废话有点多,如果我是带下拉刷新和上拉加载那肿么办,也是超级简单,如下面代码:

    public void onLoadMore() {    adapter.showNextInDialog();    }        public void onRefresh() {    adapter.refresh();    }
在加载更多的时候调用showNextInDialog();下拉刷新的时候调用reFresh方法就可以完美实现数据更新,如果这时候有人尝试了一下发现,麻蛋,你骗我,根本不行,哈哈。。。对啊,我就是骗你,你咬我啊,还需要对应修改两个值如下图:

因为每个服务器端定义接受第几页和每一页多少条数据字段不一样,即使框架再牛逼,也不知道啊,亲,所以

比如把这个类里面的两个值修改成你跟服务器约定的字段,好了定义好了就试试吧,实现下拉刷新和上拉加载

两条语句就实现了,看到现在是不是开始对这个框架由衷的膜拜了,上面介绍已经满足了我们对adapter的基本

需求,接下来我们来介绍一下其他几种情况:

1.如果我请求里面带其他参数肿么办简单new了adapter之后下面加上你所有想传服务器的参数:
        //添加参数
        adapter.addParam("key1", "value1");、

2.如果服务器返回的层级很深它是如何知道我要解析的那个数组对应的哪个字段呢看下面:

        adapter.setDataBulider(new DataBulider() {
            @Override
            public JSONArray onDate(Response response) {
                //传入你的那个节点
                return response.jSONArrayFrom("xxx");
            }
        });

3.如果我要根据服务器某个字段对某个View进行隐藏或者显示怎么办:

        adapter.addField(new FieldMap("activeaddress", R.id.content) {
            @Override
            public Object fix(View itemV, Integer po, Object o, Object jo) {
                JSONObject joo=(JSONObject) jo;
                //这里可以做一些额外的工作
                itemV.findViewById(R.id.icon).setVisibility(JSONUtil.getInt(joo, "status")==1?View.VISIBLE:View.INVISIBLE);
                return o;
            }
        });

4.某个View事件点击处理

        adapter.setOnInViewClickListener(R.id.pic, new BeanAdapter.InViewClickListener() {

            @Override
            public void OnClickListener(View itemV, View v, Integer po,
                    Object jo) {
                JSONObject joo=(JSONObject) jo;
                dialoger.showToastLong(getActivity(), JSONUtil.getString(joo, "username"));
            }
        });

5.adapter想监听数据请求完之后进行某些操作如下:

        //加载成功后回调
        adapter.setOnLoadSuccess(new LoadSuccessCallBack() {
            @Override
            public void callBack(Response response) {
                if(response.isSuccess()){
                    dialoger.showToastShort(getActivity(), "加载成功");
                    if(adapter.getPageNo()==1){
                        listV.setSelection(0);
                    }
                    
                }
            }
        });

看完之后,我只想说你特么想的这么周到,我已经无言以对啊,回想之前ListView或者GridView使用Adapter上面都能满足我。我真的找不出任何理由不用。

0 0
原创粉丝点击