StartActivityForResult 用于多个按钮访问一个 activity 并在选择时获取不同的数据?

StartActivityForResult for multiple buttons accessing one activity and getting different datas on selection?

我正在开发一款应用程序,其功能之一是允许用户输入 phone 号码或 select 联系人中的 phone 号码。

activity 旁边有 3 个 EditTexts 和 3 个 Buttons,按钮打开联系人 Activity 和 return selected phone 数字并相应地设置 EditText

我已经尝试为每个 button 设置单独的 cursors。 我也尝试过使用不同的 intent 变量。

我的问题:当用户select要从中获取数据的联系人时,光标return是一个不同的号码。它是 return 旁边的联系人或之前 select 编辑的联系人。

3 个按钮 startActivityForResultOnClick 方法。

//The intent
i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

public void onClick(View v) {

        switch (v.getId()){

        case (R.id.button1):
        startActivityForResult(i, 0);
        break;

        //I know it's an ImageView
        case (R.id.imageView1):

        startActivityForResult(i, 1);
        break;

        case (R.id.imageView2):

        startActivityForResult(i, 2);
        break;

        }
    }

OnActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent intent) {


    super.onActivityResult(requestCode, resultCode, intent);

    switch (requestCode){

    case (0) :
          if (resultCode == Activity.RESULT_OK) {
              Cursor c =  getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
                     c.moveToFirst();
                    contact1 = c.getString(c.getColumnIndex(Phone.NUMBER));
                    et.setText(contact1);

                }
            break;

    case (1) : 
            if (resultCode == Activity.RESULT_OK) {
                Cursor c1 =  getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
                     c1.moveToFirst();
                    contact2 = c1.getString(c1.getColumnIndex(Phone.NUMBER));
                    et2.setText(contact2);


                }
            break;
    case (2) : 
        if (resultCode == Activity.RESULT_OK) {
            Cursor c2 =  getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
                 c2.moveToFirst();
                contact3 = c2.getString(c2.getColumnIndex(Phone.NUMBER));
                et3.setText(contact3);

            }
        break;
            }

        }   

Phone.CONTENT_URI更改为intent.getData();

Uri contactData = intent.getData();
Cursor c =  getContentResolver().query(contactData, null, null, null, null); 

你做错的是每次查询完全相同的查询而不考虑 intent 结果...所以当然你每次都会得到相同的结果

也因为你想得到phone号加一个projection值:

String[] projection = {Phone.NUMBER};
getContentResolver().query(contactData, projection, null, null, null);

为了更好地理解请阅读how to get contact phone number

当我尝试在 Android 中调用多个 startactivityforResult 时,它只调用了在 startactivityforResult 上声明的第一个,我通过使用 startActivityforResult 创建一个函数并将意图和请求代码传递给包含 startActivityForResult 的函数来解决这个问题.