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 个按钮 和 startActivityForResult
的 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
结果...所以当然你每次都会得到相同的结果
也因为你想得到phone号加一个projection
值:
String[] projection = {Phone.NUMBER};
getContentResolver().query(contactData, projection, null, null, null);
为了更好地理解请阅读how to get contact phone number
当我尝试在 Android 中调用多个 startactivityforResult 时,它只调用了在 startactivityforResult 上声明的第一个,我通过使用 startActivityforResult 创建一个函数并将意图和请求代码传递给包含 startActivityForResult 的函数来解决这个问题.
我正在开发一款应用程序,其功能之一是允许用户输入 phone 号码或 select 联系人中的 phone 号码。
activity 旁边有 3 个 EditTexts
和 3 个 Buttons
,按钮打开联系人 Activity
和 return selected phone 数字并相应地设置 EditText
。
我已经尝试为每个 button
设置单独的 cursors
。
我也尝试过使用不同的 intent
变量。
我的问题:当用户select要从中获取数据的联系人时,光标return是一个不同的号码。它是 return 旁边的联系人或之前 select 编辑的联系人。
3 个按钮 和 startActivityForResult
的 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
结果...所以当然你每次都会得到相同的结果
也因为你想得到phone号加一个projection
值:
String[] projection = {Phone.NUMBER};
getContentResolver().query(contactData, projection, null, null, null);
为了更好地理解请阅读how to get contact phone number
当我尝试在 Android 中调用多个 startactivityforResult 时,它只调用了在 startactivityforResult 上声明的第一个,我通过使用 startActivityforResult 创建一个函数并将意图和请求代码传递给包含 startActivityForResult 的函数来解决这个问题.