自制通讯录

来源:互联网 发布:linux下修改字符集 编辑:程序博客网 时间:2024/04/25 11:35

这次的通讯录主要包括手机联系人列表展现,新建联系人两个功能。大概结构如下:

首先上联系人列表xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#fcfcfc"    android:orientation="vertical"  >   <RelativeLayout   android:layout_width="fill_parent"  android:layout_height="45dp"  android:id="@+id/title"   android:background="#3370CC"  android:gravity="center_vertical"  >                      <TextView        android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="联系人"        android:layout_centerInParent="true"        android:textSize="20sp"android:textColor="#ffffff" /> <ImageButton     android:id="@+id/right_btn"    android:layout_width="100px"         android:layout_height="wrap_content"        android:layout_alignParentRight="true"         android:layout_centerVertical="true"        android:layout_marginRight="5dp"        android:src="@drawable/title_btn_function"android:background="@drawable/xj"android:onClick="newPer"    />      </RelativeLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center"            android:background="@drawable/search_bar_bg" >            <EditText                android:id="@+id/editText1"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:hint="搜索"                android:singleLine="true"                android:focusable="false"                android:focusableInTouchMode="true"                android:textColor="#000"                android:drawableLeft="@drawable/search_bar_icon_normal"                 android:background="@drawable/search_bar_edit_bg" >                           </EditText>                    </LinearLayout>                <RelativeLayout      android:layout_width="fill_parent"     android:layout_height="fill_parent">         <ListView             android:layout_width="fill_parent"           android:layout_height="wrap_content"          android:layout_marginRight="22dp"           android:id="@+id/ListView01">                    </ListView>        <com.example.shabao.SideBar      android:id = "@+id/sideBar"      android:layout_height="fill_parent"      android:layout_width="22dp"    android:layout_alignParentRight="true"  />                 </RelativeLayout>        </LinearLayout>
再来看MainActivity:

import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.TreeMap;import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.Window;import android.widget.ListView;import android.widget.SimpleAdapter;/** *  * @author 百世经纶 * */@SuppressLint("DefaultLocale")public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.contact_list); ListView list = (ListView) findViewById(R.id.ListView01);                //生成动态数组,加入数据        ArrayList<HashMap<String, Object>> listItem         = new ArrayList<HashMap<String, Object>>();        //用TreeMap可以实现按首字母排序,不需要另外再做排序操作        Map<String,ArrayList<ContactInfo>> maplist = new TreeMap<String,ArrayList<ContactInfo>>();        ContentResolver resolver = this.getContentResolver();        maplist = Util.getContact(resolver);        ArrayList<ContactInfo> value = new ArrayList<ContactInfo>();        Iterator<String> it=maplist.keySet().iterator();        String key = "";        while(it.hasNext()){        key = it.next().toString();                value = maplist.get(key);            listItem.add(Util.addC(key));            for(ContactInfo c :value){        listItem.add(Util.addC(c));            }                   }        //生成适配器的Item和动态数组对应的元素        MyListAdapter listItemAdapter = new MyListAdapter(this,listItem,//数据源             R.layout.childlayout,//ListItem的XML实现            //动态数组与ImageItem对应的子项                    new String[] {"ItemImage","ItemTitle", "ItemText", "key"},             //ImageItem的XML文件里面的一个ImageView,两个TextView ID            new int[] {R.id.contactIcon,R.id.name,R.id.description}        );               //添加并且显示        list.setAdapter(listItemAdapter);        SideBar indexBar = (SideBar) findViewById(R.id.sideBar);          indexBar.setListView(list);       }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void newPer(View v){Intent intent = new Intent(MainActivity.this, Contact_CreatActivity.class);startActivity(intent);MainActivity.this.finish();}}
里面用到的取通讯录数据的方法在Util文件中,我在里面建了27个线性列表不知道是不是还有更简便的写法,

import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;import android.content.ContentResolver;import android.database.Cursor;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.text.TextUtils;/** *  * @author 百世经纶 * */public class Util {//还原11位手机号public static String GetNumber(String num){if(num!=null){if (num.startsWith("+86"))        {num = num.substring(3);        }        else if (num.startsWith("86")){        num = num.substring(2);        }}else{num="";}return num;}/** * 读取手机上的联系人 * @param r * @return */public static Map<String,ArrayList<ContactInfo>> getContact(ContentResolver r) { Map<String,ArrayList<ContactInfo>> listMembers = new TreeMap<String,ArrayList<ContactInfo>>(); ArrayList<ContactInfo> ma = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mb = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mc = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> md = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> me = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mf = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mg = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mh = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mi = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mj = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mk = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> ml = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mm = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mn = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mo = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mp = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mq = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mr = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> ms = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mt = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mu = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mv = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mw = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mx = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> my = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> mz = new ArrayList<ContactInfo>(); ArrayList<ContactInfo> other = new ArrayList<ContactInfo>(); Cursor cursor = null; try { // ContentResolver resolver = this.getContentResolver();    cursor= r.query(Phone.CONTENT_URI,                  new String[] { Phone.CONTACT_ID, Phone.DISPLAY_NAME,                          Phone.NUMBER, Phone.SORT_KEY_PRIMARY },                  null, null, Phone.SORT_KEY_PRIMARY);  if (cursor != null) {          while (cursor.moveToNext()) {         ContactInfo contact = new ContactInfo();            String number = cursor.getString(2);              // 当手机号码为空的或者为空字段 跳过当前循环                if (TextUtils.isEmpty(number))                    continue;              // 得到联系人名称                            String username = cursor.getString(1);            String sortKey = getSortKey(cursor.getString(3));            int id = cursor.getInt(0);            contact.setContactName(username);            contact.setSortKey(sortKey);            contact.setUserNumber(number);            contact.setId(id);            if(sortKey.equals("A")){             ma.add(contact);            }else if(sortKey.equals("B")){             mb.add(contact);            }else if(sortKey.equals("C")){             mc.add(contact);            }else if(sortKey.equals("D")){             md.add(contact);            }else if(sortKey.equals("E")){             me.add(contact);            }else if(sortKey.equals("F")){             mf.add(contact);            }else if(sortKey.equals("G")){             mg.add(contact);            }else if(sortKey.equals("H")){             mh.add(contact);            }else if(sortKey.equals("I")){             mi.add(contact);            }else if(sortKey.equals("J")){             mj.add(contact);            }else if(sortKey.equals("K")){             mk.add(contact);            }else if(sortKey.equals("L")){             ml.add(contact);            }else if(sortKey.equals("M")){             mm.add(contact);            }else if(sortKey.equals("N")){             mn.add(contact);            }else if(sortKey.equals("O")){             mo.add(contact);            }else if(sortKey.equals("P")){             mp.add(contact);            }else if(sortKey.equals("Q")){             mq.add(contact);            }else if(sortKey.equals("R")){             mr.add(contact);            }else if(sortKey.equals("S")){             ms.add(contact);            }else if(sortKey.equals("T")){             mt.add(contact);            }else if(sortKey.equals("U")){             mu.add(contact);            }else if(sortKey.equals("V")){             mv.add(contact);            }else if(sortKey.equals("W")){             mw.add(contact);            }else if(sortKey.equals("X")){             mx.add(contact);            }else if(sortKey.equals("Y")){             my.add(contact);            }else if(sortKey.equals("Z")){             mz.add(contact);            }else if(sortKey.equals("#")){             other.add(contact);            }                    }        listMembers.put("A", ma);        listMembers.put("B", mb);        listMembers.put("C", mc);        listMembers.put("D", md);        listMembers.put("E", me);        listMembers.put("F", mf);        listMembers.put("G", mg);        listMembers.put("H", mh);        listMembers.put("I", mi);        listMembers.put("J", mj);        listMembers.put("K", mk);        listMembers.put("L", ml);        listMembers.put("M", mm);        listMembers.put("N", mn);        listMembers.put("O", mo);        listMembers.put("P", mp);        listMembers.put("Q", mq);        listMembers.put("R", mr);        listMembers.put("S", ms);        listMembers.put("T", mt);        listMembers.put("U", mu);        listMembers.put("V", mv);        listMembers.put("W", mw);        listMembers.put("X", mx);        listMembers.put("Y", my);        listMembers.put("Z", mz);        listMembers.put("#", other);    }  }catch(Exception e){ e.printStackTrace(); }finally{ cursor = null; }return listMembers;}/*** 获取sort key的首个字符,如果是英文字母就直接返回,否则返回#。* * @param sortKeyString* 数据库中读取出的sort key* @return 英文字母或者#*/private static String getSortKey(String sortKeyString) {String key = sortKeyString.substring(0, 1).toUpperCase();if (key.matches("[A-Z]")) { return key;}return "#";} public static HashMap<String, Object> addC(ContactInfo c){HashMap<String, Object> map = new HashMap<String, Object>();map.put("ItemImage", R.drawable.h015);//图像资源的ID    map.put("ItemTitle", c.getContactName());    map.put("ItemText", c.getUserNumber());    map.put("key", c.getSortKey());return map;}public static HashMap<String, Object> addC(String key){HashMap<String, Object> map = new HashMap<String, Object>();map.put("ItemImage", null);//图像资源的ID    map.put("ItemTitle", key);    map.put("ItemText", null);    map.put("key", key);return map;}}
接下去是 适配器和索引,索引这一块,之前还不知道怎么处理,参考了下面这篇博客才完成的:http://blog.csdn.net/ilysony/article/details/6292771。

import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import android.content.Context;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.SectionIndexer;import android.widget.SimpleAdapter;import android.widget.TextView;public class MyListAdapter extends SimpleAdapter implements SectionIndexer {private View myView;private TextView name, num;private ImageView img;private LayoutInflater layoutinflater;ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();int layoutId;String[] from;int[] to;@SuppressWarnings("unchecked")public MyListAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to) {super(context, data, resource, from, to);// TODO Auto-generated constructor stubthis.listItem = (ArrayList<HashMap<String, Object>>) data;this.layoutId = resource;this.from = from;this.to = to;this.layoutinflater = LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn super.getCount();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubmyView = layoutinflater.inflate(R.layout.childlayout, null);name = (TextView) myView.findViewById(to[1]);num = (TextView) myView.findViewById(to[2]);img = (ImageView) myView.findViewById(to[0]);//Iterator<HashMap<String, Object>> it1 = listItem.iterator();//while(it1.hasNext()){HashMap<String, Object> map = new HashMap<String, Object>();map = listItem.get(position);if(map.get(from[0]) == null && map.get(from[2]) == null){//英文首字母name.setText(map.get(from[1]).toString());num.setVisibility(View.GONE);img.setVisibility(View.GONE);name.setTextSize(26);name.setBackgroundColor(Color.GRAY);if(listItem.get(position+1).get(from[3]).toString().equals(map.get(from[1]).toString())){name.setVisibility(View.VISIBLE);}else{//字母目录下没有列表项LinearLayout l1 = (LinearLayout) myView.findViewById(R.id.linearLayout1);l1.setVisibility(View.GONE);}}else{//正常联系人name.setText(map.get(from[1]).toString());img.setImageResource((Integer) map.get(from[0]));num.setText(map.get(from[2]).toString());num.setVisibility(View.VISIBLE);img.setVisibility(View.VISIBLE);//l1.setVisibility(View.VISIBLE);name.setTextSize(30);}//}return myView;}@Overridepublic Object[] getSections() {// TODO Auto-generated method stubreturn null;}@Overridepublic int getPositionForSection(int section) {// TODO Auto-generated method stubif (section == 35) {              return 0;          }          for (int i = 0; i < listItem.size(); i++) {              char[] firstChar = listItem.get(i).get(from[3]).toString().toCharArray();              if (firstChar[0] == section) {                  return i;              }          }          return -1;  }@Overridepublic int getSectionForPosition(int position) {// TODO Auto-generated method stubreturn 0;}}
索引类:

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.ListView;import android.widget.SectionIndexer;/** *  * @author 百世经纶 * */public class SideBar extends View {private char[] l;private SectionIndexer sectionIndexter = null;private ListView list;private final int m_nItemHeight = 38;private int aa = 0;public SideBar(Context context) {super(context);init();}public SideBar(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {l = new char[] {'#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S','T', 'U', 'V', 'W', 'X', 'Y', 'Z' };setBackgroundColor(0x44FFFFFF);}public SideBar(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public void setListView(ListView _list) {list = _list;sectionIndexter = (SectionIndexer) _list.getAdapter();}public boolean onTouchEvent(MotionEvent event) {super.onTouchEvent(event);int i = (int) event.getY();int idx = i / m_nItemHeight;if (idx >= l.length) {idx = l.length - 1;} else if (idx < 0) {idx = 0;}//取得当前按下的数组下标aa = idx;invalidate();//重新绘制界面if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {if (sectionIndexter == null) {sectionIndexter = (SectionIndexer) list.getAdapter();}//获取列表的位置int position = sectionIndexter.getPositionForSection(l[idx]);if (position == -1) {return true;}//将列表焦点移到当前位置list.setSelection(position);}return true;}protected void onDraw(Canvas canvas) {Paint paint = new Paint();paint.setColor(0xFFA6A9AA);paint.setTextSize(30);paint.setTextAlign(Paint.Align.CENTER);float widthCenter = getMeasuredWidth() / 2;for (int i = 0; i < l.length; i++) {if(i == aa){//绘制索引,按下的颜色加以区别paint.setColor(Color.GREEN);canvas.drawText(String.valueOf(l[i]), widthCenter, m_nItemHeight + (i * m_nItemHeight), paint);}else{paint.setColor(0xFFA6A9AA);canvas.drawText(String.valueOf(l[i]), widthCenter, m_nItemHeight + (i * m_nItemHeight), paint);}}super.onDraw(canvas);}}
里面有用到的列表项xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:orientation="horizontal"  android:paddingTop="0.0dip"  android:paddingBottom="0.0dip">  <ImageView   android:id="@+id/contactIcon"  android:padding="4.0dip"  android:layout_width="48.0dip"android:layout_height="48.0dip"android:scaleType="fitCenter"  android:layout_marginLeft="10.0dip"android:layout_marginTop="5.0dip"android:layout_marginBottom="5.0dip"  android:src="@drawable/h015"  />  <LinearLayout      android:id="@+id/linearLayout1"  android:layout_height="wrap_content"  android:layout_weight="1"  android:layout_width="fill_parent"  android:layout_marginLeft="5.0dip"android:layout_marginTop="9.0dip"android:layout_marginBottom="9.0dip"  android:orientation="vertical">    <TextView  android:textColor="#000000"  android:textSize="22sp"  android:id="@+id/name"  android:layout_marginRight="5.0dip"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:singleLine="true"  android:text="name"    />    <TextView android:id="@+id/description"         android:textSize="18sp"         android:textColor="#cccccc"         android:text="13819881668"         android:layout_marginTop="10dp"         android:ellipsize="marquee"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:layout_marginRight="5.0dip"         android:singleLine="true" android:marqueeRepeatLimit="1"         />    </LinearLayout>  </LinearLayout>

最后是新建联系人页面,界面比较丑,凑合着看吧。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#fcfcfc"    android:orientation="vertical"  >   <RelativeLayout   android:layout_width="fill_parent"  android:layout_height="45dp"  android:id="@+id/title"   android:background="#3370CC"  android:gravity="center_vertical"  >                      <TextView        android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="新建联系人"        android:layout_centerInParent="true"        android:textSize="20sp"android:textColor="#ffffff" /> <TextView     android:id="@+id/baocun"    android:layout_width="100dp"         android:layout_height="wrap_content"        android:layout_alignParentRight="true"         android:layout_centerVertical="true"        android:layout_marginRight="10dp"        android:gravity="right"        android:text="保存"android:onClick="newPer"android:textSize="20sp"android:textColor="#ffffff"    />         </RelativeLayout>       <LinearLayout android:orientation="horizontal"android:layout_width="fill_parent"    android:layout_height="wrap_content">   <TextView       android:layout_height="wrap_content"       android:layout_width="wrap_content"       android:layout_marginTop="5dip"       android:layout_marginLeft="10dip"       android:layout_marginRight="10dip"       android:text="姓名:"       android:layout_gravity="center"/>   <EditText       android:id="@+id/sr_name"       android:layout_height="wrap_content"       android:layout_width="fill_parent"       android:layout_marginLeft="10dip"       android:layout_marginRight="10dip"       android:scrollHorizontally="true"       android:autoText="false"/>   </LinearLayout>        <LinearLayout android:orientation="horizontal"android:layout_width="fill_parent"    android:layout_height="wrap_content">   <TextView       android:layout_height="wrap_content"       android:layout_width="wrap_content"       android:layout_marginTop="5dip"       android:layout_marginLeft="10dip"       android:layout_marginRight="10dip"       android:text="手机:"       android:layout_gravity="center"/>   <EditText       android:id="@+id/sr_num"       android:layout_height="wrap_content"       android:layout_width="fill_parent"       android:layout_marginLeft="10dip"       android:layout_marginRight="10dip"       android:scrollHorizontally="true"       android:autoText="false"/>   </LinearLayout>        </LinearLayout>
相应的Activity:

import android.net.Uri;import android.os.Bundle;import android.provider.Contacts;import android.provider.Contacts.People;import android.app.Activity;import android.app.AlertDialog;import android.content.ContentValues;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.EditText;import android.widget.TextView;/** *  * @author 百世经纶 * */@SuppressWarnings("deprecation")public class Contact_CreatActivity extends Activity {EditText name, num;TextView baocun;//OnClickListener l;@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.contact_create);name = (EditText) findViewById(R.id.sr_name);num = (EditText) findViewById(R.id.sr_num);baocun = (TextView) findViewById(R.id.baocun);baocun.setOnClickListener(l);        }private OnClickListener l = new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.baocun:String uname = name.getText().toString(); String unum = num.getText().toString();if(uname != null && !uname.equals("") && unum !=null && !unum.equals("")){Uri u = insertContact(Contact_CreatActivity.this,uname,unum);System.out.println(u);new AlertDialog.Builder(Contact_CreatActivity.this).setTitle("提示").setMessage("新增联系人成功!").setPositiveButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubname.setText("");num.setText("");}}).show();}else {new AlertDialog.Builder(Contact_CreatActivity.this).setTitle("提示").setMessage("新增联系人姓名、手机号码不能为空!").setPositiveButton("确定", null).show();}case R.id.delete:break;case R.id.newsome:break;default:break;}}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/** * 插入联系人 */private Uri insertContact(Context context, String name, String phone) {          ContentValues values = new ContentValues();       values.put(People.NAME, name);       Uri uri = getContentResolver().insert(People.CONTENT_URI, values);       Uri numberUri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY);       values.clear();              values.put(Contacts.Phones.TYPE, People.Phones.TYPE_MOBILE);       values.put(People.NUMBER, phone);       getContentResolver().insert(numberUri, values);              return uri;}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_BACK:if (event.getRepeatCount() == 0) { // 按下的如果是BACK,同时没有重复Intent intent = new Intent();intent.setClass(Contact_CreatActivity.this, MainActivity.class);startActivity(intent); Contact_CreatActivity.this.finish();}break;default:break;}return super.onKeyDown(keyCode, event);}}
最后不要忘记加权限:

<uses-permission android:name="android.permission.WRITE_CONTACTS" /><uses-permission android:name="android.permission.READ_CONTACTS" />
好了,看下运行的结果,以三星9300为准:



点一下索引,列表焦点下移


以上就是全部内容了,但还有一个问题:上拉左边的list,拉到其他索引位置的时候,怎么让索引的绿色光标跟着动。有兴趣的朋友可以交流一下。



0 0
原创粉丝点击