Android之ListView打造聊天界面

在上篇博客我们讲了关于RecyclerView的多布局,我之前说了ListView与RecyclerView多布局还是有区别的,下面我们来看看区别在哪个地方!
首先在adapter里面,由于我们使用adapter都是继承BaseAdapter,每次都要重新实现 getCount()、getItem()等方法,你会发现这些方法每次写的都一样,唯一有区别就是getView方法,每次都要写这么多代码,累吧!这里写图片描述累!!!这里写图片描述
于是我对adapter进行简单封装,来看一下代码:

    public abstract class MyBaseAdapter extends BaseAdapter {
        private List mList;
        private Context mContext;
        private Q view;
    public MyBaseAdapter() {
        super();
    }

    public MyBaseAdapter(List mList, Context mContext) {
        super();
        this.mList = mList;
        this.mContext = mContext;
    }

    public MyBaseAdapter(List mList, Context mContext, Q view) {
        super();
        this.mList = mList;
        this.mContext = mContext;
        this.view = view;
    }

    @Override
    public int getCount() {
        return mList == null ? 0 : mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    }

这样我们只需继承这个基类就可以了,就不要再写那些方法了,只需要实现getView方法就可以了。
关于ListView的多布局,我们需要重写两个方法:

    @Override
    public int getItemViewType(int position) {
    //因为在ChatEntity里面添加了类型,判断position上对应的类型
        ChatEntity data = mChatData.get(position);
        return data.getmType();
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

getItemViewType()这个方法是获取该位置的类型,getViewTypeCount()是指返回类型的数量,目前我们是做对话界面,类型在实体类里面添加了,至于这个2,是因为我们有两个布局。我们在getView根据类型判断即可,这里不贴代码了,下面demo里面有。
效果图:
Android之ListView打造聊天界面_第1张图片
(二)我们都知道QQ消息左滑能删除该消息的,怎么实现的呢?这里写图片描述有一个叫swipmenu的library这里面有大牛封装好的左滑效果,我们只要添加以下代码就可以实现左滑效果:
布局中:

  <com.hy.swipemenulistview.SwipeMenuListView
        android:layout_gravity="center"
        android:id="@+id/chat_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@null"
        android:scrollbars="none"/>

代码中:

/***
    * 初始化滑动菜单
    * */

    private void initMenu() {
        SwipeMenuCreator creator = new SwipeMenuCreator() {
            @Override
            public void create(SwipeMenu menu) {
                //创建打开菜单Item
                SwipeMenuItem openItem = new SwipeMenuItem(ChatActivity.this);
                // set item background设置背景
                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,0xCE)));
                // set item width设置宽
                openItem.setWidth(dp2px(90));
                // set item title设置标题
                openItem.setTitle("Open");
                // set item title fontsize这是标题大小
                openItem.setTitleSize(18);
                // set item title font color设置标题颜色
                openItem.setTitleColor(Color.WHITE);
                // add to menu添加到菜单中
                menu.addMenuItem(openItem);
                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,0x3F, 0x25)));
                // set item width
                deleteItem.setWidth(dp2px(90));
                // set a icon
                deleteItem.setIcon(R.mipmap.ic_delete);
                // add to menu
                menu.addMenuItem(deleteItem);

                }
            };
            mListView.setMenuCreator(creator);
         }

这样就把那个左滑菜单添加到item里面了,如果我们想要对item操作,还要给ListView添加onMenuItemClick监听。

  @Override
    public void onMenuItemClick(int position, SwipeMenu menu, int index) {
         switch (index) {
             case 0:
                 Toast.makeText(ChatActivity.this, "你点到人家啦!", Toast.LENGTH_SHORT).show();
                 break;
             case 1:
                 mChatData.remove(position);
                 mTextAdapter.notifyDataSetChanged();
                 break;
             }
         }

这样就实现左滑,并带有操作的效果。
效果图:
Android之ListView打造聊天界面_第2张图片
如果在添加library出现下面问题:
Android之ListView打造聊天界面_第3张图片
这是说里面的v4包版本不同,只要把其中一个复制替换另一个即可。不替换可能会出现其他隐藏问题(目前还不确定病情)。
如有疑问~请与我联系~~
demo下载地址

ListView聊天

swipmenu左滑library

你可能感兴趣的:(Android开发)