Android之ListView打造聊天界面
2016-03-03 14:40
651 查看
在上篇博客我们讲了关于RecyclerView的多布局,我之前说了ListView与RecyclerView多布局还是有区别的,下面我们来看看区别在哪个地方!
首先在adapter里面,由于我们使用adapter都是继承BaseAdapter,每次都要重新实现 getCount()、getItem()等方法,你会发现这些方法每次写的都一样,唯一有区别就是getView方法,每次都要写这么多代码,累吧!
![](https://img-blog.csdn.net/20160303132503904)
累!!!
![](https://img-blog.csdn.net/20160303132537248)
于是我对adapter进行简单封装,来看一下代码:
这样我们只需继承这个基类就可以了,就不要再写那些方法了,只需要实现getView方法就可以了。
关于ListView的多布局,我们需要重写两个方法:
getItemViewType()这个方法是获取该位置的类型,getViewTypeCount()是指返回类型的数量,目前我们是做对话界面,类型在实体类里面添加了,至于这个2,是因为我们有两个布局。我们在getView根据类型判断即可,这里不贴代码了,下面demo里面有。
效果图:
![](https://img-blog.csdn.net/20160303142215223)
(二)我们都知道QQ消息左滑能删除该消息的,怎么实现的呢?
![](https://img-blog.csdn.net/20160303143005148)
有一个叫swipmenu的library这里面有大牛封装好的左滑效果,我们只要添加以下代码就可以实现左滑效果:
布局中:
代码中:
这样就把那个左滑菜单添加到item里面了,如果我们想要对item操作,还要给ListView添加onMenuItemClick监听。
这样就实现左滑,并带有操作的效果。
效果图:
![](https://img-blog.csdn.net/20160303145142064)
如果在添加library出现下面问题:
![](https://img-blog.csdn.net/20160303150120146)
这是说里面的v4包版本不同,只要把其中一个复制替换另一个即可。不替换可能会出现其他隐藏问题(目前还不确定病情)。
如有疑问~请与我联系~~
demo下载地址:
ListView聊天
swipmenu左滑library
首先在adapter里面,由于我们使用adapter都是继承BaseAdapter,每次都要重新实现 getCount()、getItem()等方法,你会发现这些方法每次写的都一样,唯一有区别就是getView方法,每次都要写这么多代码,累吧!
累!!!
于是我对adapter进行简单封装,来看一下代码:
public abstract class MyBaseAdapter<T, Q> extends BaseAdapter { private List<T> mList; private Context mContext; private Q view; public MyBaseAdapter() { super(); } public MyBaseAdapter(List<T> mList, Context mContext) { super(); this.mList = mList; this.mContext = mContext; } public MyBaseAdapter(List<T> 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里面有。
效果图:
(二)我们都知道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; } }
这样就实现左滑,并带有操作的效果。
效果图:
如果在添加library出现下面问题:
这是说里面的v4包版本不同,只要把其中一个复制替换另一个即可。不替换可能会出现其他隐藏问题(目前还不确定病情)。
如有疑问~请与我联系~~
demo下载地址:
ListView聊天
swipmenu左滑library
相关文章推荐
- Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题
- android: SQLite创建数据库
- 低功耗蓝牙(BLE)官方文档翻译
- Android屏幕适配全攻略(最权威的官方适配指导)
- Activity的启动流程 Android5.1.1
- android如何切换皮肤
- Android开发艺术探索--第一章Acitivity的生命周期和启动模式
- 联通手机营业厅AndroidV4_0_1分析(一)
- Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结
- Android自定义View之电池电量显示
- Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中
- Android跨进程通讯的四种方式
- Android 内存优化与泄露
- Android Studio 中解决.9图片报错的问题
- android: SharedPreferences实现记住密码功能
- android import adt项目遇到问题
- android鼠标事件
- android: SharedPreferences存储
- Android 设计模式之三:Android设计模式系列链接
- android命令抓LOG