Baseadapter类库—来简化我们的adapter

gethub地址
省去编写大量的viewholder代码

使用

依赖
ForRecyclerView

compile 'com.zhy:base-rvadapter:3.0.3'

ForListView

compile 'com.zhy:base-adapter:3.0.3'

adapter
继承commonadapter<数据的泛型>
commonadapter是baseadapter类库里面 的一个类

public class HomeAdapter extends CommonAdapter {
    //参1上下文
    public HomeAdapter(Context context, int layoutId, List datas) {
        super(context, layoutId, datas);
    }

    //设置数据
    @Override
    protected void convert(ViewHolder holder, AppInfo appInfo, int position) {
        //设置数据
        holder.setText(R.id.tv_title, appInfo.name)
                .setText(R.id.tv_size, Formatter.formatFileSize(holder.itemView.getContext(), appInfo.size))
                .setText(R.id.tv_des, appInfo.des)
                .setRating(R.id.rb_star, appInfo.stars);
        //加载图片
        Glide.with(holder.itemView.getContext())
                .load(Url.ImagePrefix + appInfo.iconUrl)
                .bitmapTransform(new CropCircleTransformation(holder.itemView.getContext()))
                .placeholder(R.drawable.ic_default)//默认的图片
                .error(R.mipmap.ic_launcher)//加载失败显示的图片
                .crossFade(1000)//渐渐显示出来的时间
                //找到view--getview(id)
                .into((ImageView) holder.getView(R.id.iv_icon));

    }
}

设置adapter

//参1上下文--参2布局--参3数据集合
adapter = new HomeAdapter(getContext(), R.layout.adapter_home, list);
recyclerView.setAdapter(adapter);

条目点击监听器—recyclerview

//设置条目点击监听了--获取到点击条目的位置
adapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() {
    //当条目点击的时候执行
    @Override
    public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
        //因为有头布局所以应用的条目索引从1开始
        //然而集合的索引是从0开始
        AppInfo appInfo = list.get(position - 1);
    }

    //当长按条目的时候执行---按下不放超过400ms就算长按
    @Override
    public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position) {
        return false;
    }
});

上拉加载loadmore

Baseadapter 类库中的loadmore
加载更多的view—布局




    

    


设置adapter

//初始化加载更多的LoadMoreWrapper--getcount里面的条目在原来的天目上+1
loadMoreWrapper = new LoadMoreWrapper<>(adapter);
//设置加载更多的View
loadMoreWrapper.setLoadMoreView(R.layout.layout_loadmore);
recyclerView.setAdapter(loadMoreWrapper);

通知加载更多

//通知更新数据
loadMoreWrapper.notifyDataSetChanged();

设置上拉加载监听

//设置加载更多的监听器
loadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {
    @Override
    public void onLoadMoreRequested() {
        //判断是否加载
        if (list.size() >= 60) {
            //数据到头,--
            loadMoreWrapper.showLoadMore(true);
            return;
        }
        //判断不是第一页再进行加载
        if (list.size() >= 20) {
            ---如果不加上来就会调用一次—这样就调用了两次
            loadData();
        }
    }
});

友好的提示用户加载完了—即更改上拉加载view里面的数据—会将圈拉下来----优化loadmore
定义一个类继承它

public class LoadMoreAdapter extends LoadMoreWrapper {
    private View loadmoreView;

    public LoadMoreAdapter(RecyclerView.Adapter adapter, Context context) {
        super(adapter);

        loadmoreView = View.inflate(context, R.layout.layout_loadmore, null);
        //设置加载更多的View
        setLoadMoreView(loadmoreView);
    }

    /**
     *    * 没有更多数据了
     *    *
     *    * @param isNoMoreData
     *    
     */
    public void showLoadMore(boolean isNoMoreData) {
        TextView tvLoad = (TextView) loadmoreView.findViewById(R.id.tv_loadmore);
        ProgressBar pbLoadmore = (ProgressBar) loadmoreView.findViewById(R.id.pb_loadmore);

        tvLoad.setText(isNoMoreData ? "暂无更多数据" : "加载中...");
        pbLoadmore.setVisibility(isNoMoreData ? View.GONE : View.VISIBLE);
    }
}

添加头布局—并展示

由于RecyclerView并没有提供addHeaderView的方法,
头也可以当做条目来做
baseadapter类库已经帮助我们封装好了HeaderAndFooter,HeaderAndFooterWrapper的用法很简单需要包裹一个普通的adapter,类似装饰者设计模式
header布局

    
    

        

    

简单使用

//添加header—装饰者模式
headerFooterWrapper = new HeaderAndFooterWrapper<>(adapter);
View headerView = View.inflate(getContext(),R.layout.layout_home_header,null);
viewPager = (ViewPager) headerView.findViewById(R.id.viewPager);
headerFooterWrapper.addHeaderView(headerView);

多种条目

baseadapter库的multiItemTypeAdapter实现多种条目
设置adapter

MultiItemTypeAdapter adapter = new MultiItemTypeAdapter(getContext(), list);
//添加title类型---有几种类型添加集中类型
adapter.addItemViewDelegate(new TitleItemDelagate());
adapter.addItemViewDelegate(new SubItemDelagate());
recyclerView.setAdapter(adapter);

添加条目类型
有几种布局就写几个条目类型
布局略…
定义一个类继承ItemViewDelegate

//写一个类实现ItemViewDelegate<数据类型>
public class TitleItemDelagate implements ItemViewDelegate {
    //传入布局文件
     

    @Override
    public int getItemViewLayoutId() {
        return R.layout.adapter_title;
    }

    /**
     *      * 什么情况是属于当前类型--当什么情况的时候,使用此view
     *      
     */
    //参1传进来的数据
    @Override
    public boolean isForViewType(Object item, int position) {
        return item instanceof String;
    }

    //设置数据—参数2传进来的 数据
    @Override
    public void convert(ViewHolder holder, Object o, int position) {
        String s = (String) o;
        holder.setText(R.id.tv_title, s);
    }
}
 
 

条目2同上


//写一个类实现ItemViewDelegate<数据类型>
public class SubItemDelagate implements ItemViewDelegate {
    //传入对应的条目布局
    @Override
    public int getItemViewLayoutId() {
        return R.layout.adapter_sub;
    }

    //什么时候使用该类型
    @Override
    public boolean isForViewType(Object item, int position) {
        return item instanceof SubCategory;
    }

    //设置数据
    @Override
    public void convert(ViewHolder holder, Object o, int position) {
        SubCategory sub = (SubCategory) o;
        holder.setText(R.id.tv_sub1, sub.name1);
        GlideUtil.loadImage(sub.url1, (ImageView) holder.getView(R.id.iv_image1));

        //但是第二个和第三个需要判断是否为空
        if (!TextUtils.isEmpty(sub.name2)) {
            holder.setText(R.id.tv_sub2, sub.name2);
            GlideUtil.loadImage(sub.url2, (ImageView) holder.getView(R.id.iv_image2));
        } else {
            holder.setVisible(R.id.ll_sub2, false);
        }

        if (!TextUtils.isEmpty(sub.name3)) {
            holder.setText(R.id.tv_sub3, sub.name3);
            GlideUtil.loadImage(sub.url3, (ImageView) holder.getView(R.id.iv_image3));
        } else {
            holder.setVisible(R.id.ll_sub3, false);
        }
    }
}
 

                            
                        
                    
                    
                    

你可能感兴趣的:(Baseadapter类库—来简化我们的adapter)