栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android手机联系人快速索引(手机通讯录)

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android手机联系人快速索引(手机通讯录)

最近需要实现一个手机通讯录的快速索引功能。根据姓名首字母快速索引功能。下面是一个手机联系人快速索引的效果,总体来说代码不算难,拼音转换的地方略有复杂。下面上源码:源码中有注释。

下面是效果图:

MainActivity:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.baseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
 private ListView lv_main;
 private FriendAdapter adapter;
 private List data = new ArrayList();
 private QuickIndexView qiv_main;
 private TextView tv_main_word;
 private Handler handler = new Handler(){
 public void handleMessage(android.os.Message msg) {
  //隐藏word
  tv_main_word.setVisibility(View.GONE);
 }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 lv_main = (ListView) findViewById(R.id.lv_main);
 qiv_main = (QuickIndexView) findViewById(R.id.qiv_main);
 tv_main_word = (TextView) findViewById(R.id.tv_main_word);
 //设置监听
 qiv_main.setonIndexChangedListener(new QuickIndexView.onIndexChangedListener() {
  @Override
  public void onIndexChanged(String word) {
  tv_main_word.setText(word);
  tv_main_word.setVisibility(View.VISIBLE);
  //handler.removeMessages(1);
  //移除未处理的消息
  handler.removeCallbacksAndMessages(null);
  //发延迟消息
  handler.sendEmptyMessageDelayed(1, 2000);
  //滑动listview
  //查找对应的item
  for(int i=0;i 25) {
  index = 25;
  }
  if (index < 0) {
  index = 0;
  }
  // 如果下标有改变, 强制重绘
  if (index != touchIndex) {
  // 更新touchIndex
  touchIndex = index;
  // 强制重绘
  invalidate();
  // 通知Activity更新TextView
  if (onIndexChangedListener != null) {
   onIndexChangedListener.onIndexChanged(indexArr[index]);
  }
  }
  break;
 case MotionEvent.ACTION_UP:
  touchIndex = -1;
  // 强制重绘
  invalidate();
  // 通知Activity更新TextView
  if (onIndexChangedListener != null) {
  onIndexChangedListener.onUp();
  }
  break;
 default:
  break;
 }
 return true;// 所有的事件都由当前视图消费
 }
 private onIndexChangedListener onIndexChangedListener;
 
 public void setonIndexChangedListener(
  onIndexChangedListener onIndexChangedListener) {
 this.onIndexChangedListener = onIndexChangedListener;
 }
 interface onIndexChangedListener {
 // 当操作的下标改变时自动调用
 public void onIndexChanged(String word);
 // 当up时调用
 public void onUp();
 }
}

联系人类:


public class Friend implements Comparable {
 private String name;
 private String pinyin;
 public Friend(String name) {
 super();
 this.name = name;
 pinyin = PinYinUtils.getPinYin(name);
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getPinyin() {
 return pinyin;
 }
 public void setPinyin(String pinyin) {
 this.pinyin = pinyin;
 }
 @Override
 public String toString() {
 return "Friend [name=" + name + ", pinyin=" + pinyin + "]";
 }
 @Override
 public int compareTo(Friend another) {
 return this.pinyin.compareTo(another.getPinyin());
 }
}

工具类:用于将汉字转换为拼音


public class PinYinUtils {
 
 public static String getPinYin(String hanzi){
 String pinyin = "";
 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();//控制转换是否大小写,是否带音标
 format.setCaseType(HanyuPinyinCaseType.UPPERCASE);//大写
 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
 //由于不能直接对多个汉字转换,只能对单个汉字转换
 char[] arr = hanzi.toCharArray();
 for (int i = 0; i < arr.length; i++) {
  if(Character.isWhitespace(arr[i]))continue;//如果是空格,则不处理,进行下次遍历
  //汉字是2个字节存储,肯定大于127,所以大于127就可以当为汉字转换
  if(arr[i]>127){
  try {
   //由于多音字的存在,单 dan shan
   String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(arr[i], format);
   if(pinyinArr!=null){
   pinyin += pinyinArr[0];
   }else {
   pinyin += arr[i];
   }
  } catch (BadHanyuPinyinOutputFormatCombination e) {
   e.printStackTrace();
   //不是正确的汉字
   pinyin += arr[i];
  }
  }else {
  //不是汉字,
  pinyin += arr[i];
  }
 }
 return pinyin;
 }
}

以上代码是关于Android手机联系人快速索引(手机通讯录)的全部叙述,希望大家喜欢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号