Android怎么实现手机联系人分栏效果
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,今天小编给大家分享一下Android怎么实现手机联系人分栏效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
千家信息网最后更新 2025年01月17日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安全错误
数据库的锁怎样保障安全
欧盟网络安全指导
软件开发 名词 里程碑
光明大陆服务器装备怎么升级
老黎软件开发
中邮人寿数据库招聘
赤峰智能炒币机器人软件开发价格
linux服务器清空
邵阳串口服务器厂家
视频地图服务器
贵池区现代软件开发服务品质保障
怎么保障家无线网络安全
互联网金融网络安全技术
t1系统 数据库怎么连接
数据库创建日期用什么字段类型
播放器的歌曲从数据库显示
数据库导论目录
网络安全 检查表
网站服务器拒绝了连接
移动网络技术就业方向
零距离网络安全黑板报
java 监听服务器
吃鸡国际服ios服务器繁忙
gms网络安全是什么
超星学习通计算机网络技术考试
怎么保障家无线网络安全
如何把表格数据制作成数据库
云服务器使用雷电模拟器
海南军工守时模块服务器
软件开发是什么专业可以学的
互联网医疗科技圈