[英]StartActivityForResult for multiple buttons accessing one activity and getting different datas on selection?
我正在开发一个应用程序,其中一个功能是允许用户从电话联系人中输入电话号码或 select。
该活动有 3 个EditTexts
,每个侧面有 3 个Buttons
,按钮打开联系人Activity
并返回所选电话号码并相应地设置EditText
。
我试过为每个button
设置单独的cursors
。 我也尝试过使用不同的intent
变量。
我的问题:当用户选择要从中获取数据的联系人时,cursor 返回一个不同的号码。 它要么返回旁边的联系人,要么返回之前选择的联系人。
带有startActivityForResult
的3 个按钮的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.