自己项目中需要做一个通讯录,单是和微信不一样,微信通讯录头部的几列好像是固定的,但是项目中的头部是群组管理,是动态的,对其联系人还需要做首字母排序,效果倒是很容易做出来,但是这里只能放一个listview,不然list就不能实现随侧边栏字母滑动查找,所以自己想了个办法

分享一下,同时也是复习,希望看到的童鞋有帮助

首先我重写了listview,在listview的头部添加了一个listview(注意:头部的list是添加到父list的第一行中,即position=0)

public class DrawListView extends ListView {private Context context;private LinearLayout llList;public LineListView topList;public DrawListView(Context context) {super(context);// TODO Auto-generated constructor stubthis.context = context;}public DrawListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stubthis.context = context;initUI();}public DrawListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubthis.context = context;initUI();}private void initUI() {// TODO Auto-generated method stubllList = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.top_layout, null);addHeaderView(llList);topList = (LineListView) llList.findViewById(R.id.top_list);}}

其中头部是linelistview(简单是自适应高度listview),这个就是父list头部的list用来做群组管理的

public class LineListView extends ListView {public LineListView(Context context) {super(context);// TODO Auto-generated constructor stub}public LineListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){  int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);  super.onMeasure(widthMeasureSpec, mExpandSpec);  }  }

在activity中使用:

其实也很简单,分别给对应的listview都加上监听器,经过测试发现没有问题,只是操作父list的时候要注意,他的第一行被子list给占了,不能用来显示数据

所以父list在获取数据的时候,请记得position-1(自己调试一下就知道了)

public class MainActivity extends Activity {private DrawListView dlist;private ListAdapter lAdapter;private ListAdapter tAdapter;private String[] names = new String[] { "路飞", "乔巴", "索隆", "山治", "娜美", "罗宾","乌索普", "布鲁克", "香克斯", "罗杰", "艾斯", "桑尼号", "梅丽号", "弗兰奇", "多福朗明哥" };private String[] lol = new String[] { "好运姐", "锤石", "金克斯", "阿狸", "猴子", "盖伦","皇子", "盲僧", "日女", "豹女", "刀妹", "刀锋", "安妮", "男枪", "女警", "鳄鱼", "炮娘","提莫", "慎", "赵信", "VN", "断头台", "风女", "莫甘娜", "妖姬", "&猪女", "%炸弹人","*寒冰", "蛮子" };private List<String> l1 = new ArrayList<String>();private List<String> l2 = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);dlist = (DrawListView) findViewById(R.id.list);dlist.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, l1.get(position-1), Toast.LENGTH_SHORT).show();}});getData();lAdapter = new ListAdapter(this, l1);dlist.setAdapter(lAdapter);tAdapter = new ListAdapter(this, l2);dlist.topList.setAdapter(tAdapter);dlist.topList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, l2.get(position), Toast.LENGTH_SHORT).show();addData();tAdapter.notifyDataSetChanged();}});}private void getData() {for (int i = 0; i < names.length; i++) {l1.add(names[i]);}for (int i = 0; i < lol.length; i++) {l2.add(lol[i]);}}private void addData(){l1.add("我才是老大,懂?");l2.add("我才是老大,懂?");}
}

简单的实现了在listview的头部加了个listview,这样listview就可以适应通讯录的侧边栏滑动到具体的字母排序的地方

Demo下载http://download.csdn.net/detail/u011440404/7784331

自己现实的仿微信通讯录列表相关推荐

  1. 【uniapp前端组件】仿微信通讯录列表组件

    仿微信通讯录列表组件 示例图 前言 仿微信通讯录列表组件,可实现通讯列表以及选择多个联系人功能. 组件介绍 本组件有三个自定义组件构成,都已经集成在bugking7-contact-list中,该组件 ...

  2. RN仿微信通讯录列表

    源码在此 先看一下预览图效果: pic1.jpg 首先通过构造器初始化state constructor(props) {super(props);this.state = {//Global这里是全 ...

  3. android 字母索引三方,Android ListView字母索引(仿微信通讯录列表)

    布局代码 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_paren ...

  4. 【Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52355199 本文 ...

  5. uni-app 写小程序 索引列表,仿微信通讯录

    心里认定了一个女孩 就要好好的珍惜对待她,人生不容辜负,你必须要更加努力 .加油 骚年 uni-app 写小程序 索引列表,仿微信通讯录 去uni-app官网 下载插件 indexlist <m ...

  6. RecyclerView+index索引实现仿微信通讯录

    感觉之前写的有点乱,所以有重新整理了一下这个博客: demo下载地址:http://download.csdn.net/detail/qq_34501274/9799175 最近跟朋友聊天,说道博客相 ...

  7. android 字母搜索栏,android仿微信通讯录搜索示例(匹配拼音,字母,索引位置)

    前言: 仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置 一:先看效果图 字母索引 搜索匹配 二:功能分析 1:汉字转拼音 通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现 ...

  8. Android仿微信通讯录

    Android仿微信通讯录 分3部: 1.listview实现显示头像.名字(太简单,这里就不写了) 通讯录页面xml布局代码: <LinearLayout xmlns:android=&quo ...

  9. 仿微信通讯录的Demo----PinnedHeaderListView

    仿微信通讯录的Demo--PinnedHeaderListView 侧边栏首字母匹配 + header分组 本示例代码来自网上 这里只贴出效果图,附件Demo源码,仅供学习和以后参考时用 附件 Dem ...

最新文章

  1. 通过NFS实现简单的文件共享
  2. python基于水色图像的水质评价_基于Python和遥感图像的膨胀与腐蚀操作
  3. 第十届蓝桥杯c语言b组试题,2019年第十届蓝桥杯(决赛)国赛B组C++(B)
  4. 使用Stream流的方式,遍历集合,对集合中的数据进行过滤
  5. 深入互联网广告中的出价模式(上)— 基础出价模式
  6. SAP ABAP 平台新的编程模型
  7. 一个技术预案,让老板当场喊出了“奥利给”
  8. 嵌入式操作系统内核原理和开发(实时系统中的定时器)
  9. CPU为什么不做成圆的而是方的?
  10. 一种基于地图导航的语音识别管理系统的制作方法
  11. [技术文档]Linux从入门到精通
  12. 宽字符与Unicode
  13. PAT排名汇总(排序)
  14. 【Python】P2525 Uim的情人节礼物·其之壱
  15. STM32cubemx教程及STM32入门(四)串口通信
  16. HTML5小游戏源码收藏
  17. unity+ar制作太阳系
  18. SEO人员,三思而后行,要规避为哪些行业做SEO?
  19. 教你玩转 sqlplus,工作效率提升 200%
  20. Spring Boot 实践折腾记(13):使用WebFlux构建响应式「推送API 」

热门文章

  1. 兴业银行银企直联对接记录及SDK
  2. 一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
  3. 网络安全拟态防御技术
  4. php 文本搜索软件,【MSTech Search in Contents下载】MSTech Search in Contents(文件搜索工具) v2.0.0.0 免费版-开心电玩...
  5. 再谈Comparator
  6. 成都数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型
  7. Android二级购物车(带商家)的简单实现
  8. 我们都有幸见证区块链,一席流动的盛宴 | 7天,2000位区块链人聚集
  9. X理论和Y理论(转载)
  10. 马一篇帖子,关于reactingFoam与high-speed flow