• 【转载】万能adapter


    adapter总是自己写,其实使用现成的框架会节省不少代码

     原文地址:https://github.com/hongyangAndroid/baseAdapter

    base-adapter

    Android 万能的Adapter for ListView,RecyclerView,GridView等,支持多种Item类型的情况。

    引入

    ForRecyclerView

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

    ForListView

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

    使用

    ##(1)简单的数据绑定(ListView与其使用方式一致)

    首先看我们最常用的单种Item的书写方式:

    mRecyclerView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas)
    {
        @Override
        public void convert(ViewHolder holder, String s)
        {
            holder.setText(R.id.id_item_list_title, s);
        }
    });

    是不是相当方便,在convert方法中完成数据、事件绑定即可。

    只需要简单的将Adapter继承CommonAdapter,复写convert方法即可。省去了自己编写ViewHolder等大量的重复的代码。

    • 可以通过holder.getView(id)拿到任何控件。
    • ViewHolder中封装了大量的常用的方法,比如holder.setText(id,text),holder.setOnClickListener(id,listener)等,可以支持使用。

    效果图:

    ##(2)多种ItemViewType(ListView与其使用方式一致)

    对于多中itemviewtype的处理参考:https://github.com/sockeqwe/AdapterDelegates ,具有极高的扩展性。

    MultiItemTypeAdapter adapter = new MultiItemTypeAdapter(this,mDatas);
    adapter.addItemViewDelegate(new MsgSendItemDelagate());
    adapter.addItemViewDelegate(new MsgComingItemDelagate());

    每种Item类型对应一个ItemViewDelegete,例如:

    public class MsgComingItemDelagate implements ItemViewDelegate<ChatMessage>
    {
    
        @Override
        public int getItemViewLayoutId()
        {
            return R.layout.main_chat_from_msg;
        }
    
        @Override
        public boolean isForViewType(ChatMessage item, int position)
        {
            return item.isComMeg();
        }
    
        @Override
        public void convert(ViewHolder holder, ChatMessage chatMessage, int position)
        {
            holder.setText(R.id.chat_from_content, chatMessage.getContent());
            holder.setText(R.id.chat_from_name, chatMessage.getName());
            holder.setImageResource(R.id.chat_from_icon, chatMessage.getIcon());
        }
    }

    贴个效果图:

    ##(3) 添加HeaderView、FooterView

    mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);
    
    TextView t1 = new TextView(this);
    t1.setText("Header 1");
    TextView t2 = new TextView(this);
    t2.setText("Header 2");
    mHeaderAndFooterWrapper.addHeaderView(t1);
    mHeaderAndFooterWrapper.addHeaderView(t2);
    
    mRecyclerView.setAdapter(mHeaderAndFooterWrapper);
    mHeaderAndFooterWrapper.notifyDataSetChanged();

    类似装饰者模式,直接将原本的adapter传入,初始化一个HeaderAndFooterWrapper对象,然后调用相关API添加。

    ##(4) 添加LoadMore

    mLoadMoreWrapper = new LoadMoreWrapper(mOriginAdapter);
    mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
    mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()
    {
        @Override
        public void onLoadMoreRequested()
        {
        }
    });
    
    mRecyclerView.setAdapter(mLoadMoreWrapper);

    直接将原本的adapter传入,初始化一个LoadMoreWrapper对象,然后调用相关API即可。

    ##(5)添加EmptyView

    mEmptyWrapper = new EmptyWrapper(mAdapter);
    mEmptyWrapper.setEmptyView(R.layout.empty_view);
    
    mRecyclerView.setAdapter(mEmptyWrapper );

    直接将原本的adapter传入,初始化一个EmptyWrapper对象,然后调用相关API即可。

    支持链式添加多种功能,示例代码:

    mAdapter = new EmptyViewWrapper(
        new LoadMoreWrapper(
        new HeaderAndFooterWrapper(mOriginAdapter)));

    一些回调

    onViewHolderCreated

    mListView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas)
    {
        @Override
        public void convert(ViewHolder holder, String o, int pos)
        {
            holder.setText(R.id.id_item_list_title, o);
        }
    
        @Override
        public void onViewHolderCreated(ViewHolder holder, View itemView)
        {
            super.onViewHolderCreated(holder, itemView);
           //AutoUtil.autoSize(itemView)
        }
    });

     

  • 相关阅读:
    win32_弹弹球游戏
    蓝桥杯评测_前n项和
    算法_fibonacci_递归求值
    PTA 分类
    _tmain() 和 main()
    VS2010 C++ 插件 VissualAssistX 安装
    vs2010 > LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    int、long、long long 的取值范围
    B树 B-树 B+树 B*树
    PTA 5-10 公路村村通 (30)
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/6739229.html
Copyright © 2020-2023  润新知