ContactPicker(選擇連絡人) 詳解
ContactPicker:使用者可以選擇一個連絡人.
1. 建立ContactPicker活動(Activity)
位置: java->package-> ContactPicker.java
package mzx.spike.contactpicker.app;import android.app.Activity;import android.content.ContentUris;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;/** * Created by C.L.Wang on 14-3-20. */public class ContactPicker extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Cursor c = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null ); String[] from = new String[]{ContactsContract.Contacts.DISPLAY_NAME_PRIMARY}; int[] to = new int[]{R.id.itemTextView}; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listitemlayout, c, from, to, 0); ListView lv = (ListView)findViewById(R.id.contactListView); lv.setAdapter(adapter); lv.setOnItemClickListener(new ListView.OnItemClickListener(){ public void onItemClick(AdapterView parent, View view, int pos, long id) { c.moveToPosition(pos); int rowId = c.getInt(c.getColumnIndexOrThrow(_id)); Uri outURI = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, rowId); Intent outData = new Intent(); outData.setData(outURI); setResult(Activity.RESULT_OK, outData); finish(); } }); }}
詳解:
1. 建立一個活動繼承Activity, 顯示activity_main介面;
2. 建立遊標Cursor遍曆儲存在連絡人清單中的連絡人;
3. 構造簡單遊標適配器(SimpleCursorAdapter), 注意此方法標記為遺棄, 後面需要加上參數0, 版本SDK11+;
4. 將適配器綁定至ListView, setAdapter();
5. 添加項目點擊事件(setOnItemClickListener), 將遊標移植點擊位置, 取出rowID, 構造URI, 將URI綁定至Intent,;
6. 返回結果, setResult(), 結果碼(Activity_RESULT_OK) 和 Intent;
2. 修改activity_main.xml
位置: res->layout->activity_main.xml
添加
ListView, ContactPicker會調用此布局(layout);
3. 建立listitemlayout.xml
位置: res->layout->listitemlayout.xml
TextView顯示ListView中的每一個連絡人, ContactPicker會調用此布局(layout);
4. 建立測試布局contactpickertester.xml
位置: res->layout->contactpickertester.xml
TextView顯示選擇的連絡人,
Button選擇按鈕, 啟動介面;
5. 建立測試類別ContactPickerTester.java
位置: java->package->ContactPickerTester.java
package mzx.spike.contactpicker.app;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;/** * Created by Administrator on 14-3-20. */public class ContactPickerTester extends Activity { public static final int PICK_CONTACT = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contactpickertester); Button button = (Button)findViewById(R.id.pick_contact_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse(content://contacts/)); startActivityForResult(intent, PICK_CONTACT); } }); } @Override public void onActivityResult(int reqCode, int resCode, Intent data) { super.onActivityResult(reqCode, resCode, data); switch (reqCode) { case (PICK_CONTACT) : { if (resCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = getContentResolver().query(contactData,null, null, null, null); c.moveToFirst(); String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)); c.close(); TextView tv = (TextView)findViewById(R.id.selected_contact_textview); tv.setText(name); } } default: break; } }}
1. 在onCreate()方法內, 重寫
按鍵監聽事件(button.setOnClickListene());
2. 在onClick()方法中, 指定Intent.ACTION_PICK動作, 和連絡人資料庫(content://contacts/);
3. 重寫onActivityResult()事件, 處理動作傳回值, reqCode, 請求碼, resCode, 結果碼, data, Intent資料;
4. 提取資料, 更新ViewText的內容;
6. 修改Manifest, 進行註冊
位置: root->AndroidManifest.xml
1. 註冊ContactPicker,
intent-filter, 動作PICK, 種類DEFAULT(預設動作);
2. 註冊ContactPickerTester, 啟動(MAIN)程式;
7. 運行程式
代碼下載: http://download.csdn.net/detail/u012515223/7072781