繁体   English   中英

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

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

我正在开发一个应用程序,其中一个功能是允许用户从电话联系人中输入电话号码或 select。

该活动有 3 个EditTexts ,每个侧面有 3 个Buttons ,按钮打开联系人Activity并返回所选电话号码并相应地设置EditText

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

我的问题:当用户选择要从中获取数据的联系人时,cursor 返回一个不同的号码。 它要么返回旁边的联系人,要么返回之前选择的联系人。

带有startActivityForResult3 个按钮OnClick方法。

//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结果...所以当然您每次都会得到相同的结果

另外,由于要获取电话号码,请添加一个projection值:

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

为了更好地理解,请阅读如何获取联系电话

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM