在列表视图中检索联系人,并通过单击操作在下一个活动中显示姓名和电话号码

时间:2012-03-04 08:06:37

标签: android

我已经获得了代码,通过内容提供商我正在检索手机联系人并以列表格式显示它们。 当我点击第一个活动的列表格式联系人时,我想在下一个活动中显示电话号码和特定人物的姓名。我收到错误,因为它无法执行点击操作并将其显示在下一个活动中请帮助我。

这是我通过内容提供商显示联系人的第一个活动。

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();

 }

             });

  }

  }

这是第二项活动.......

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) 

                    {



                    }

            }

        }

    }

}

1 个答案:

答案 0 :(得分:0)

我真的无法弄明白你的代码。第一个活动似乎是创建一个Intent来启动Full Activity,但它有两个“onclick”方法,它执行setResult()和finish(),即使它从未执行过getIntent()!

第二个活动为整个Phone表创建一个ACTION_PICK Intent,并通过对结果进行查询来处理返回,该结果应该是用户选择的#联系人的联系人ID。但我认为这不是整个URI;你应该通过调试验证。然后,您尝试获取此联系人的DISPLAY_NAME。

很好,但我不明白为什么你需要第一个活动。

我在Stackoverflow上的其他地方发布了一些关于使用Contacts Provider的说明;只需搜索android和ContactsContract。