从 onActivityResult 参数传递的 Intent 如何与我的应用程序一起使用?
How does the Intent passed from the onActivityResult argument work with my application?
@Override
public void onActivityResult(int reqCode, int resultCode, **Intent data**){
super.onActivityResult(reqCode, resultCode, **data**);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = **data**.getData();
Cursor c = getContentResolver().query(**contactData**, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// TODO Whatever you want to do with the selected contact name.
//ImageView imageView = (ImageView)findViewById(R.id.imageView);
//Picasso.with(this).load("https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg").into(imageView);
FragmentManager FM = getFragmentManager();
FragmentTransaction FT = FM.beginTransaction();
FragmentActivity F1 = new FragmentActivity();
FT.add(R.id.frame_layout, F1);
FT.commit();
}
}
break;
}
}
有人可以解释一下 onActivityResult
参数中的 data
变量是如何用来使这段代码工作的吗?
我看到该变量用于调用 getData()
,但我对这个变量如何连接到此方法之外的 Intent 感到困惑。
此外,调用 data.getData()
到底做了什么?
基本上我正在尝试理解这段代码
public void onActivityResult(int reqCode, int resultCode, Intent data){
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = getContentResolver().query(contactData, null, null, null, null);
谁能帮我解释一下?
看这里:Click me and than the first answer
在 link 你可以看到你可以给 Intent data
一个包或额外的东西,你用你的 getData() 方法得到。
假设被调用的Activity(由startActivityForResult()
启动)在完成之前设置结果如下:
Intent data = new Intent();
data.putExtra ("aValue", 42);
getActivity().setResult(Activity.RESULT_OK, data);
finish();
为了获取调用activity中的值,使用
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
int aValue = data.getIntExtra("aValue", -1);
....
}
}
这个例子是基于一个int
,但是,还有很多其他的值类型可以被传递。请参阅 Androids Intent 文档。
p.s.:让我补充一点,它与 void Intent.setData(Uri)
和 Uri Intent.getData()
的工作方式相同,而不是 putExtra(...)
和 getExtra(...)
数据变量是您在结尾 Activity 中指定的 Intent。当你想完成用 startActivityForResult()
调用的 Activity 时,你应该调用 setResult()。
作为第一个参数,您应该设置结果代码(RESULT_OK
、RESULT_CANCELED
、...)。您还可以添加第二个,它应该是一个 Intent,它将包含您希望在 onActivityResult()
中接收的信息。那就是onActivityResult()
中的数据变量。
如果您想了解更多关于 getData()
的信息,您可以查看:http://developer.android.com/reference/android/content/Intent.html#getData()
@Override
public void onActivityResult(int reqCode, int resultCode, **Intent data**){
super.onActivityResult(reqCode, resultCode, **data**);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = **data**.getData();
Cursor c = getContentResolver().query(**contactData**, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// TODO Whatever you want to do with the selected contact name.
//ImageView imageView = (ImageView)findViewById(R.id.imageView);
//Picasso.with(this).load("https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg").into(imageView);
FragmentManager FM = getFragmentManager();
FragmentTransaction FT = FM.beginTransaction();
FragmentActivity F1 = new FragmentActivity();
FT.add(R.id.frame_layout, F1);
FT.commit();
}
}
break;
}
}
有人可以解释一下 onActivityResult
参数中的 data
变量是如何用来使这段代码工作的吗?
我看到该变量用于调用 getData()
,但我对这个变量如何连接到此方法之外的 Intent 感到困惑。
此外,调用 data.getData()
到底做了什么?
基本上我正在尝试理解这段代码
public void onActivityResult(int reqCode, int resultCode, Intent data){
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = getContentResolver().query(contactData, null, null, null, null);
谁能帮我解释一下?
看这里:Click me and than the first answer
在 link 你可以看到你可以给 Intent data
一个包或额外的东西,你用你的 getData() 方法得到。
假设被调用的Activity(由startActivityForResult()
启动)在完成之前设置结果如下:
Intent data = new Intent();
data.putExtra ("aValue", 42);
getActivity().setResult(Activity.RESULT_OK, data);
finish();
为了获取调用activity中的值,使用
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
int aValue = data.getIntExtra("aValue", -1);
....
}
}
这个例子是基于一个int
,但是,还有很多其他的值类型可以被传递。请参阅 Androids Intent 文档。
p.s.:让我补充一点,它与 void Intent.setData(Uri)
和 Uri Intent.getData()
的工作方式相同,而不是 putExtra(...)
和 getExtra(...)
数据变量是您在结尾 Activity 中指定的 Intent。当你想完成用 startActivityForResult()
调用的 Activity 时,你应该调用 setResult()。
作为第一个参数,您应该设置结果代码(RESULT_OK
、RESULT_CANCELED
、...)。您还可以添加第二个,它应该是一个 Intent,它将包含您希望在 onActivityResult()
中接收的信息。那就是onActivityResult()
中的数据变量。
如果您想了解更多关于 getData()
的信息,您可以查看:http://developer.android.com/reference/android/content/Intent.html#getData()