ListView常用技巧及常用扩展(聊天ListView)——A
2019-03-12 本文已影响30人
辰_鱼
一、常用技巧
①使用ViewHolder模式提高效率:
原因:ViewHolder模式充分利用ListView的视图缓存机制,避免了每次在调用getView()的时候都去通过findViewById()实例化控件。
②设置项目间分割线:
![](https://img.haomeiwen.com/i16526257/e1356c9b1d3e89d2.png)
③隐藏ListView的滚动条(默认在ListView滚动时,在右边会显示滚动条):
![](https://img.haomeiwen.com/i16526257/e0357508c19b50a8.png)
④取消ListView的item默认的点击效果:
![](https://img.haomeiwen.com/i16526257/598bc8ef2c959039.png)
取消点击效果
![](https://img.haomeiwen.com/i16526257/80ff4ee7110b5042.png)
⑤指定具体显示的Item及平滑移动:
![](https://img.haomeiwen.com/i16526257/72be22872ce8a40d.png)
![](https://img.haomeiwen.com/i16526257/c81926f18564039c.png)
⑥处理空ListView:
![](https://img.haomeiwen.com/i16526257/c9a7a4a760ee74c3.png)
![](https://img.haomeiwen.com/i16526257/d098881c9fc1bb56.png)
⑦遍历ListView中所有的Item:
![](https://img.haomeiwen.com/i16526257/a840a1fcfdcd865c.png)
⑧ListView滑动监听(方式:OnTouchListener、OnScrollListener):
a:OnTouchListener是View中的监听事件,通过监听ACTION_DOWM、ACTION_MOVE、ACTION_UP这三个事件发生的坐标来判断用户滑动的方向。
![](https://img.haomeiwen.com/i16526257/c45fa9634833d618.png)
使用代码
b:OnScrollListener是AbsListView中的监听事件,其封装了许多与ListView相关的信息。
![](https://img.haomeiwen.com/i16526257/e741e8f2e4660b2c.png)
解释一下OnScroll()方法中三个参数:
参数一(firstVisibleItem):当前能看到的第一个Item的ID。(包括未显示完全的Item)
参数二(visibleItemCount):当前能看到的Item总数。(包括未显示完全的Item)
参数三(totalItemCount):整个ListView的Item总数。
通过这三个参数,可以进行一些判断,比如:
![](https://img.haomeiwen.com/i16526257/1b8bb07d6a1a8add.png)
判断滚动的方向
![](https://img.haomeiwen.com/i16526257/ec900895f71af9fd.png)
二、常用扩展(聊天ListView):
![](https://img.haomeiwen.com/i16526257/11c235b5de50b921.png)
准备工作:⑴两个布局(chat_item_in和chat_item_out),布局几乎是一致的,只是换一下方向。所以这里只给其中一个布局。
![](https://img.haomeiwen.com/i16526257/686fca5b9214f27c.png)
⑵封装一个ChatBean,里面参数:int type、String text、Bitmap icon。
准备好了,就开始最重要的Adapter了,在这个Adapter中继承了BaseAdapter,并在getView()方法中畸形了布局的判断,从而确定使用哪种布局。这里就给出最主要的代码:
![](https://img.haomeiwen.com/i16526257/de305edaf5a05ebe.png)
最后是MainActivity:
![](https://img.haomeiwen.com/i16526257/0c7dce922b9bf8f0.png)