zoukankan      html  css  js  c++  java
  • 封装使用ViewHolder模式的Adapter组件,及用其快速实现聊天界面

    大家都对viewholder模式并不陌生吧,避免了重复调用findViewbyId,并对convertview进行重用。但是,开发中可能会有这样的困扰,每次在创建Adapter类时,总会有许多的重复代码,比如每次都要创建一个ViewHolder类等等。为了解决这种问题,封装了viewholder模式的EasyAdapter就应运而生。在保持adapter的优化的同时,减轻你每次都需要重复去造轮子,也让你只需关心model数据的变化。EasyAdapter下载地址(https://github.com/mapleyuan/EasyAdapterHelper)。简单的使用方法如下:

      listView.setAdapter(new EasyAdapter(getApplicationContext(), R.layout.listview_item, datas) {

       @Override

               public void convert(BaseViewHolderHelper viewHolderHelper, String data) {

                     viewHolderHelper.setTextView(R.id.textView, data);

                }

             });

    那假如我们要快速创建一个下面的聊天界面的adapter该如何做呢?

    adapter代码示例如下:

    public class ChatViewAdapter extends EasyAdapter {

    public ChatViewAdapter(Context context, List<MessageModle> datas) {

        super(context, datas, new EasyAdapter.IMultiItem<MessageModle>() {

            @Override

            public int getResource(int position, MessageModle doubleChatMessage) {

                return doubleChatMessage.mIsFrom ? R.layout.chatview_list_right_item : R.layout.chatview_list_left_item;

            }

            @Override

            public int getViewTypeCount() {

                return 2;

            }

            @Override

            public int getItemViewType(int position, MessageModle doubleChatMessage) {

                return doubleChatMessage.mIsFrom ? 0 : 1;

            }

        });

    }

    @Override

    public void convert(BaseViewHolderHelper viewHolderHelper, MessageModle data) {

        if (data.mType == MessageModle.MESSAGE_TYPE_TEXT) {

            viewHolderHelper.setTextView(R.id.chatview_maincontent_text_id, data.mContent);

            viewHolderHelper.setVisibility(R.id.chatview_maincontent_image_id, View.GONE);

            viewHolderHelper.setVisibility(R.id.chatview_maincontent_text_id, View.VISIBLE);

        } else {

            viewHolderHelper.setVisibility(R.id.chatview_maincontent_image_id, View.VISIBLE);

            viewHolderHelper.setVisibility(R.id.chatview_maincontent_text_id, View.GONE);

        }

    }

    public static class MessageModle {

        public static final int MESSAGE_TYPE_TEXT = 1;

        public static final int MESSAGE_TYPE_ATTACHMENT = 2;

        boolean mIsFrom;

        /**

         * @see {@link #MESSAGE_TYPE_TEXT}

         */

        int mType;

        public String mContent;

        public MessageModle(boolean isFrom, int type, String content) {

            mIsFrom = isFrom;

            mType = type;

            mContent = content;

        }

    }

    可以看到,我们只需要继承EasyAdapter类并实现其convert()方法,就可以直接使用了。假如你对这个项目有兴趣,欢迎下载使用(https://github.com/mapleyuan/EasyAdapterHelper),有任何建议也欢迎跟我交流。

  • 相关阅读:
    Java代理(静态/动态 JDK,cglib)
    Java数据库基础(JDBC)
    Servlet基础(工作原理、生命周期)
    Java XML DOM解析(xPath)
    java 文件操作
    从源码看集合ArrayList
    全面理解java异常机制
    python3 利用pip安装ipython notebook
    Centos的一个find命令配合rm删除某天前的文件
    在Pandas中直接加载MongoDB的数据
  • 原文地址:https://www.cnblogs.com/mapleyuan/p/5215462.html
Copyright © 2011-2022 走看看