Android怎么实现手机联系人分栏效果
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天小编给大家分享一下Android怎么实现手机联系人分栏效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
千家信息网最后更新 2025年11月07日Android怎么实现手机联系人分栏效果
今天小编给大家分享一下Android怎么实现手机联系人分栏效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
效果图:

adapter具体代码如下:
public class ContactAdapter extends BaseAdapter{ private List contactBeens; private Context context; public ContactAdapter(Context context, List datas) { super(context, datas); this.context = context; contactBeens = datas; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHodler viewHodler = null; if(convertView == null){ convertView = inflater.inflate(R.layout.contact_item,parent,false); viewHodler = new ViewHodler(convertView); convertView.setTag(viewHodler); }else { viewHodler = (ViewHodler)convertView.getTag(); } viewHodler.name.setText(contactBeens.get(position).getName()); viewHodler.number.setText(contactBeens.get(position).getNumber()); viewHodler.image.setmBitmap(Analysis(contactBeens.get(position).getImage())); // 获得当前联系人名字的首字母。 其中:getAlpha()方法是自己写的一个方法(具体介绍如下), contactBeens.get(position).getAlpha()中的getAlpha()是我定义的实体类的get方法,值为当前联系人的名字的拼音。 String currentStr = getAlpha(contactBeens.get(position).getAlpha()); // 获得上一个联系人名字的首字母 String previewStr = (position - 1) >= 0 ? getAlpha(contactBeens.get(position - 1).getAlpha()) : " "; /** * 判断显示#、A-Z的TextView隐藏与可见 */ if (!previewStr.equals(currentStr)) { viewHodler.alpha.setVisibility(View.VISIBLE); viewHodler.alpha.setText(currentStr); } else { //当前联系人与上一个联系人首字母相同时,执行下面代码,隐藏alpha(这是我定义的textView)。 viewHodler.alpha.setVisibility(View.GONE); } return convertView; } public class ViewHodler{ private ContomImage image; private TextView name; private TextView number; private TextView alpha; public ViewHodler(View view) { image = (ContomImage) view.findViewById(R.id.contact_contomImage); name = (TextView) view.findViewById(R.id.contact_name); number = (TextView) view.findViewById(R.id.contact_number); alpha = (TextView) view.findViewById(R.id.alpha); } } //通过联系人的名字str ,返回联系人名字的首字母大写 @NonNull private String getAlpha(String str) { if (str == null) { return "#"; } if (str.trim().length() == 0) { return "#"; } char c = str.trim().substring(0, 1).charAt(0); //判断首字母是否是英文字母 if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) { return (c + "").toUpperCase(); // 大写输出 } else { return "#"; } }}
适配器代码解释如下:
List contactBeens 数据,是从适配器的构造方法传过来的。数据是根据Cursor一条一条的从虚拟机的联系人数据库读出来的。
在适配器代码中有多处出现getAlpha(),这个getAlpha()有两个含义:
getAlpha(contactBeens.get(position).getAlpha()); 解释: 从左边开始,第一次出现的getAlpha()是代码中最后定义的方法,是自己写的一个方法。 第二次出现的getAlpha()是实体类里的get方法,
现在来看一下,ContactBeen这个实体类里的成员变量:
public class ContactBeen { private String name; private String number; private Uri image; //该变量存储从虚拟机里读出来的每个联系人的名字的拼音 private String alpha; .... //剩下的为上述变量的get 和 set方法 以及该类的构造方法, 这里就不一一写出来了。}到这里为止,已经实现了小编今天要说的手机联系人分栏效果。如果有任何问题,给我留言,看见了一一答复,欢迎各位大神批评指教。
在这里,小编再给大家展示 : 如何从虚拟机中获取手机联系人的方法:
ContentResolver resolver1 = context.getContentResolver();Cursor cursor1 = resolver1.query(uri,null,null,null,"sort_key"); if(cursor1 != null && cursor1.moveToFirst()){ int indexName = cursor1.getColumnIndex(Phone.DISPLAY_NAME); int indexNumber = cursor1.getColumnIndex(Phone.NUMBER); int indexId = cursor1.getColumnIndex(Phone.CONTACT_ID); int indexPhoneId = cursor1.getColumnIndex(Phone.PHOTO_ID); int indexAlpha = cursor1.getColumnIndex("sort_key");//"sort_key"保存的是联系人名字的拼音字母 Uri uri1 = null; do { String name = cursor1.getString(indexName); String number = cursor1.getString(indexNumber); Long contactId = cursor1.getLong(indexId); Long phoneId = cursor1.getLong(indexPhoneId); String alpha = cursor1.getString(indexAlpha); if(phoneId > 0){ uri1 = ContentUris.withAppendedId(Contacts.CONTENT_URI,contactId); }else { uri1 = null ; } ContactBeen been = new ContactBeen(name,number,uri1,alpha); Log.d(TAG, "name : "+ name + " number : " + number + " uri1 : " + uri1 + "alpha :" + alpha ); }while (cursor1.moveToNext()); cursor1.close();}以上就是"Android怎么实现手机联系人分栏效果"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
联系
联系人
方法
名字
字母
代码
手机
效果
知识
篇文章
变量
实体
拼音
数据
适配器
适配
内容
大写
解释
不同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库表删不掉
证监会证券期货数据库
服务器电源改大功率充电器
公安局总结网络安全方面
用友数据库操作
我的世界好看村庄服务器
tomcat服务器出问题怎么办
网络文明网络安全板报
达梦企业版数据库参数
c中向数据库中修改数据
网络安全的英语作文80词
倩女ol有外国服务器吗
西安市网络安全保卫
怎么给服务器增加盘
云计算数据库文件挂载
宜良信息化软件开发零售价格
网络安全的重要作用
数据库报ORA01033
数据库知识竞赛答案
杭州云仓网络技术
网络安全系列事件型漏洞
医疗机构有服务器吗
香港代理服务器免费
年龄小于的数据库怎么计算
csgo有两种服务器吗
哈密软件开发招聘
填写数据库名怎么填
华为网络技术工程师女
网络安全企业的未来
aws 高性能网络技术