我正在为联系人列表创建多项选择布局。我成功地选择了联系人。但是,它不是在文本视图中显示联系人名称,而是显示为字符串值。我只希望联系人名称出现在TextView中而不是字符串值。
我上了2节课。一课是选择接触。而另一类则用于浏览和选择联系人。
选定的联系活动
package com.droidnova.android.samples;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.provider.ContactsContract.Contacts;
import android.view.View;
import android.widget.Button;
public class SelectContact extends Activity {
private static final int PICK_CONTACT = 0;
private Button btnPick;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button);
btnPick = (Button)findViewById(R.id.button);
btnPick.setOnClickListener(new MyOnClickListener());
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT) {
if (resultCode == RESULT_OK) {
Cursor contact = getContentResolver().query(data.getData(), null, null, null, null);
contact.moveToFirst();
String name = contact.getString(contact.getColumnIndexOrThrow(People.NAME));
}
}
}
private class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(Intent.ACTION_PICK),PICK_CONTACT);
}
}
}
通讯录活动
package com.droidnova.android.samples;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.Inflater;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Contacts extends ListActivity {
ListView list;
TextView Selection;
private static String[] PROJECTION = new String[]
{
People._ID,
People.NAME,
People.NUMBER,
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list=(ListView)findViewById(android.R.id.list);
Cursor cursor = getContentResolver().query(People.CONTENT_URI,
PROJECTION, null, null, null);
startManagingCursor(cursor);
ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_multiple_choice,
cursor,new String[]{People.NAME},new int[]{android.R.id.text1});
getListView().setChoiceMode(2);
setListAdapter(adapter);
Selection = (TextView)findViewById(R.id.selection);
}
@Override
protected void onListItemClick(ListView parent,View v,int position,long id){
Selection.setText("");
SparseBooleanArray chosen = parent.getCheckedItemPositions();
for(int i=0;i<chosen.size();i++)
{
Log.d("Selection", "index:"+i+";key:"+chosen.keyAt(i) +";value:"+chosen.valueAt(i)
+";"+PROJECTION[chosen.keyAt(i)]);
if(chosen.valueAt(i)){
Selection.append(PROJECTION[chosen.keyAt(i)]+"");
}
}
}
}
这是我的logcat:
12-02 03:10:49.840: INFO/ActivityManager(53): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.droidnova.android.samples/.SelectContact }
12-02 03:10:49.930: INFO/ActivityManager(53): Start proc com.droidnova.android.samples for activity com.droidnova.android.samples/.SelectContact: pid=715 uid=10025 gids={1015}
12-02 03:10:49.930: DEBUG/AndroidRuntime(709): Shutting down VM
12-02 03:10:49.930: DEBUG/dalvikvm(709): DestroyJavaVM waiting for non-daemon threads to exit
12-02 03:10:49.940: DEBUG/dalvikvm(709): DestroyJavaVM shutting VM down
12-02 03:10:49.940: DEBUG/dalvikvm(709): HeapWorker thread shutting down
12-02 03:10:49.940: DEBUG/dalvikvm(709): HeapWorker thread has shut down
12-02 03:10:49.940: DEBUG/jdwp(709): JDWP shutting down net...
12-02 03:10:49.940: INFO/dalvikvm(709): Debugger has detached; object registry had 1 entries
12-02 03:10:49.960: DEBUG/dalvikvm(709): VM cleaning up
12-02 03:10:49.990: ERROR/AndroidRuntime(709): ERROR: thread attach failed
12-02 03:10:50.030: DEBUG/dalvikvm(709): LinearAlloc 0x0 used 639500 of 5242880 (12%)
12-02 03:10:50.230: DEBUG/ddm-heap(715): Got feature list request
12-02 03:10:50.910: INFO/ActivityManager(53): Displayed activity com.droidnova.android.samples/.SelectContact: 1000 ms (total 1000 ms)
12-02 03:10:51.921: INFO/ActivityManager(53): Starting activity: Intent { act=android.intent.action.PICK cmp=com.droidnova.android.samples/.Contacts }
12-02 03:10:52.441: INFO/ActivityManager(53): Displayed activity com.droidnova.android.samples/.Contacts: 431 ms (total 431 ms)
12-02 03:10:53.521: DEBUG/Selection(715): index:0;key:0;value:true;_id
12-02 03:10:54.391: DEBUG/Selection(715): index:0;key:0;value:true;_id
12-02 03:10:54.391: DEBUG/Selection(715): index:1;key:1;value:true;name
12-02 03:10:54.841: DEBUG/Selection(715): index:0;key:0;value:true;_id
12-02 03:10:54.851: DEBUG/Selection(715): index:1;key:1;value:true;name
12-02 03:10:54.851: DEBUG/Selection(715): index:2;key:2;value:true;number
12-02 03:10:57.531: DEBUG/dalvikvm(220): GC freed 43 objects / 2024 bytes in 77ms
12-02 03:11:24.040: DEBUG/Selection(715): index:0;key:0;value:false;_id
12-02 03:11:24.040: DEBUG/Selection(715): index:1;key:1;value:true;name
12-02 03:11:24.050: DEBUG/Selection(715): index:2;key:2;value:true;number
12-02 03:11:25.120: DEBUG/Selection(715): index:0;key:0;value:false;_id
12-02 03:11:25.120: DEBUG/Selection(715): index:1;key:1;value:false;name
12-02 03:11:25.130: DEBUG/Selection(715): index:2;key:2;value:true;number
12-02 03:11:25.670: DEBUG/Selection(715): index:0;key:0;value:false;_id
12-02 03:11:25.680: DEBUG/Selection(715): index:1;key:1;value:false;name
12-02 03:11:25.680: DEBUG/Selection(715): index:2;key:2;value:false;number
12-02 03:11:26.641: DEBUG/Selection(715): index:0;key:0;value:true;_id
12-02 03:11:26.641: DEBUG/Selection(715): index:1;key:1;value:false;name
12-02 03:11:26.651: DEBUG/Selection(715): index:2;key:2;value:false;number
12-02 03:11:27.171: DEBUG/Selection(715): index:0;key:0;value:true;_id
12-02 03:11:27.181: DEBUG/Selection(715): index:1;key:1;value:true;name
12-02 03:11:27.181: DEBUG/Selection(715): index:2;key:2;value:false;number
12-02 03:49:00.191: DEBUG/dalvikvm(53): GC freed 17933 objects / 880976 bytes in 150ms
12-02 04:22:34.131: DEBUG/dalvikvm(102): GC freed 11675 objects / 524064 bytes in 81ms
12-02 04:38:00.181: DEBUG/dalvikvm(53): GC freed 20167 objects / 943152 bytes in 147ms
答案 0 :(得分:0)
试试这个..我正在使用此代码从联系人获取电子邮件和姓名。根据您的要求
使用此代码@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if(requestCode==CONTACT_PICKER_EMAIL)
{
Cursor cursor = null;
String email = "";
try
{
Uri result = data.getData();
Log.v(DEBUG_TAG, "Got a contact result: "
+ result.toString());
// get the contact id from the Uri
String id = result.getLastPathSegment();
// query for everything email
cursor = getContentResolver().query(Email.CONTENT_URI,
null, Email.CONTACT_ID + "=?", new String[] { id },
null);
int emailIdx = cursor.getColumnIndex(Email.DATA);
// let's just get the first email
if (cursor.moveToFirst())
{
email = cursor.getString(emailIdx);
txtconfirmBy.setText(email);
}
else
{
Log.w(DEBUG_TAG, "No results");
}
}
catch (Exception e)
{
Log.e(DEBUG_TAG, "Failed to get email data", e);
}
finally
{
if (cursor != null)
{
cursor.close();
}
}
}
else if (requestCode==CONTACT_PICKER_NAME)
{
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst())
{
String name = c.getString(c.getColumnIndexOrThrow(People.DISPLAY_NAME));
txtparticipant.setText(name);
}
}
}
}
发送请求以获取此类详情
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, CONTACT_PICKER_EMAIL);
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent,CONTACT_PICKER_NAME);