ListView的使用,獲取聯繫人數據

直接貼代碼:

 

  1. public class QueryActivity extends Activity { 
  2.     private EditText et; 
  3.  
  4.     @Override 
  5.     protected void onCreate(Bundle savedInstanceState) { 
  6.         super.onCreate(savedInstanceState); 
  7.         setContentView(R.layout.query); 
  8.         et = (EditText) this.findViewById(R.id.query_et); 
  9.     } 
  10.  
  11.     public void select(View view) { 
  12.         Intent intent = new Intent(this, SelectContactActivity.class); 
  13.         startActivityForResult(intent, 0); 
  14.     } 
  15.  
  16.     @Override 
  17.     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
  18.         if (data != null) { 
  19.             String number = data.getStringExtra("number"); 
  20.             et.setText(number); 
  21.         } 
  22.         super.onActivityResult(requestCode, resultCode, data); 
  23.     } 

 

  1. public class SelectContactActivity extends Activity { 
  2.     private ListView lv; 
  3.      
  4.     @Override 
  5.     protected void onCreate(Bundle savedInstanceState) { 
  6.         setContentView(R.layout.select_contact); 
  7.         super.onCreate(savedInstanceState); 
  8.         lv = (ListView) findViewById(R.id.lv_select_contact); 
  9.         // TODO:如果聯繫人比較多 需要花費一定的時間,最好放在子線程裏面執行. 
  10.         ContactInfoProvider provider = new ContactInfoProvider(this); 
  11.         final List<ContactInfo> infos = provider.getContacts(); 
  12.         String[] numbers = new String[infos.size()]; 
  13.         for (int i = 0; i < infos.size(); i++) { 
  14.             numbers[i] = infos.get(i).getName() + "\n" 
  15.                     + infos.get(i).getNumber(); 
  16.         } 
  17.         lv.setAdapter(new ArrayAdapter<String>(this, R.layout.contact_item, 
  18.                 R.id.tv_contact_item_info, numbers)); 
  19.  
  20.         lv.setOnItemClickListener(new OnItemClickListener() { 
  21.  
  22.             public void onItemClick(AdapterView<?> parent, View view, 
  23.                     int position, long id) { 
  24.  
  25.                 String number = infos.get(position).getNumber(); 
  26.                 Intent data = new Intent(); 
  27.                 data.putExtra("number", number); 
  28.                 setResult(0, data); 
  29.                 finish(); 
  30.             } 
  31.         }); 
  32.     } 

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     android:orientation="vertical" > 
  6.  
  7.     <TextView 
  8.         android:layout_width="fill_parent" 
  9.         android:layout_height="wrap_content" 
  10.         android:gravity="center_horizontal" 
  11.         android:text="選擇聯繫人" 
  12.         android:textColor="#66ff00" 
  13.         android:textSize="28sp" > 
  14.     </TextView> 
  15.  
  16.     <View 
  17.         android:layout_width="fill_parent" 
  18.         android:layout_height="1dip" 
  19.         android:layout_marginTop="5dip" 
  20.         android:background="@drawable/devide_line" 
  21.         android:paddingTop="5dip" > 
  22.     </View> 
  23.  
  24.     <ListView 
  25.         android:id="@+id/lv_select_contact" 
  26.         android:layout_width="fill_parent" 
  27.         android:layout_height="fill_parent" 
  28.         android:layout_marginTop="5dip" > 
  29.     </ListView> 
  30.  
  31. </LinearLayout> 

 

  1. public class ContactInfoProvider { 
  2.     private Context context; 
  3.  
  4.     public ContactInfoProvider(Context context) { 
  5.         this.context = context; 
  6.     } 
  7.  
  8.     /** 
  9.      * 獲取所有聯繫人信息的業務方法 
  10.      * @return 
  11.      */ 
  12.     public List<ContactInfo> getContacts() { 
  13.         List<ContactInfo> contactInfos = new ArrayList<ContactInfo>(); 
  14.         // 1.查詢raw_contacts表 獲取所有聯繫人的id 
  15.         Uri rawUri = Uri.parse("content://com.android.contacts/raw_contacts"); 
  16.         Uri dataUri = Uri.parse("content://com.android.contacts/data"); 
  17.         Cursor idCursor = context.getContentResolver().query(rawUri, 
  18.                 new String[] { "contact_id" }, nullnullnull); 
  19.         while (idCursor.moveToNext()) { 
  20.             String id = idCursor.getString(0); // 得到聯繫人的id 
  21.             ContactInfo info = new ContactInfo(); 
  22.             Cursor dataCursor = context.getContentResolver().query(dataUri, 
  23.                     null"raw_contact_id=?"new String[] { id }, null); 
  24.             while (dataCursor.moveToNext()) { 
  25.                 String data1 = dataCursor.getString(dataCursor 
  26.                         .getColumnIndex("data1")); 
  27.                 String mime = dataCursor.getString(dataCursor 
  28.                         .getColumnIndex("mimetype")); 
  29.                 if ("vnd.android.cursor.item/phone_v2".equals(mime)) { 
  30.                     info.setNumber(data1); 
  31.                 } else if ("vnd.android.cursor.item/name".equals(mime)) { 
  32.                     info.setName(data1); 
  33.                 } 
  34.  
  35.             } 
  36.             dataCursor.close(); 
  37.             contactInfos.add(info); 
  38.             info = null
  39.         } 
  40.         idCursor.close(); 
  41.         return contactInfos; 
  42.     } 

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="wrap_content" 
  5.     android:gravity="center_horizontal" 
  6.     android:orientation="vertical" > 
  7.  
  8.     <TextView 
  9.         android:gravity="center_horizontal" 
  10.         android:text="聯繫人信息" 
  11.         android:id="@+id/tv_contact_item_info" 
  12.         style="@style/text_content_style" /> 
  13.  
  14. </LinearLayout> 

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources> 
  3.     <style name="text_title_style"> 
  4.         <item name="android:layout_width">fill_parent</item> 
  5.         <item name="android:layout_height">wrap_content</item> 
  6.         <item name="android:textColor">#66ff00</item> 
  7.         <item name="android:textSize">28sp</item> 
  8.     </style> 
  9.     <style name="text_content_style" parent="@style/text_title_style"> 
  10.         <item name="android:paddingTop">5dip</item> 
  11.         <item name="android:textSize">22sp</item> 
  12.     </style> 
  13.  
  14. </resources> 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章