Android 在列表视图中检索联系人,并通过单击操作在下一个活动中显示姓名和电话号码
我已经获得了代码,通过内容提供商,我可以检索电话联系人并以列表格式显示它们。 我想在下一个活动中,当我单击第一个活动的列表格式联系人时,显示特定人员的电话号码和姓名。我在这方面遇到错误,它无法执行单击操作并在下一个活动中显示。请帮助我解决此问题 这是我通过内容提供商显示联系人的第一个活动Android 在列表视图中检索联系人,并通过单击操作在下一个活动中显示姓名和电话号码,android,Android,我已经获得了代码,通过内容提供商,我可以检索电话联系人并以列表格式显示它们。 我想在下一个活动中,当我单击第一个活动的列表格式联系人时,显示特定人员的电话号码和姓名。我在这方面遇到错误,它无法执行单击操作并在下一个活动中显示。请帮助我解决此问题 这是我通过内容提供商显示联系人的第一个活动 import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import an
import android.app.Activity;
import android.app.ListActivity;
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.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class MsatActivity extends ListActivity
{
TextView ContactsTV;
ListView lv;
Cursor c;
public static final Uri CONTENT_URI =
Uri.parse("content://com.android.contacts/contacts/1557");
public void onListItemClick(View v)
{
Intent outData = new Intent(this,Full.class);
// setResult(Activity.RESULT_OK, outData);
startActivity(outData);
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri myContacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
c = getContentResolver().query(myContacts, new String[]
{ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER}
, null, null, null);
String[] columns = new String[]
{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
int[] to = new int[] {R.id.text1,R.id.text2};
SimpleCursorAdapter mAdapter = new
SimpleCursorAdapter(this,R.layout.listitems, c, columns, to);
setListAdapter(mAdapter);
lv.setOnItemSelectedListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
{
int rowId = c.getInt(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone._ID));
Uri outURI = Uri.parse(CONTENT_URI.toString() + "/" + rowId);
Intent outData = new Intent();
outData.setData(outURI);
setResult(Activity.RESULT_OK, outData);
finish();
}
});
}
}
我真的搞不懂你的代码。第一个活动似乎创建了启动整个活动的意图,但它有两个“onclick”方法,它执行setResult()和finish(),尽管它从未执行过getIntent() 第二个活动为整个电话表创建一个ACTION#PICK Intent,并通过查询结果来处理返回,结果应该是用户选择的联系人的联系人ID。不过,我不认为这是整个URI;您应该通过调试来验证这一点。然后尝试获取此联系人的显示名称 很好,但我不明白你为什么需要第一个活动 我在Stackoverflow上的其他地方发布了一些关于使用联系人提供商的说明;只需搜索android和ContactsContract
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.View;
import android.widget.Button;
public class Full extends Activity
{
private static final int CONTACT_PICKER_RESULT = 1001;
String name;
Cursor cursor;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
Button getContacts = (Button)findViewById(R.id.button1);
getContacts.setOnItemClickListener(new View.OnItemClickListener()
{
public void onClick(View v)
{
Intent i = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(i, CONTACT_PICKER_RESULT);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK)
{
switch (requestCode)
{
case CONTACT_PICKER_RESULT:
try {
Uri result = data.getData();
String id = result.getLastPathSegment();
//Get Name
cursor = getContentResolver().query(result, null, null, null, null);
if (cursor.moveToFirst())
{
name =
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
}
catch (Exception e)
{
}
}
}
}
}