论StartActivityForResult的返回结果

package com.xtu.resulttest;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.id_framelayout, new TestFragment()).commit();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("这里是activity的结果返回值。。。");
super.onActivityResult(requestCode, resultCode, data);
}
}

package com.xtu.resulttest;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class TestFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivityForResult(intent,222);
return inflater.inflate(R.layout.fragment_test, container, false);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("这是在fragment返回的数据");
super.onActivityResult(requestCode, resultCode, data);
}
}

结果的返回值为:

04-06 11:00:53.222 4924-4924/com.xtu.resulttest I/System.out: 这里是activity的结果返回值。。。
04-06 11:00:53.222 4924-4924/com.xtu.resulttest I/System.out: 这是在fragment返回的数据

 

但如果将上面的红色字 改为: getActivity().startActivityForResult()之后,返回结果如下:

04-06 11:00:53.222 4924-4924/com.xtu.resulttest I/System.out: 这里是activity的结果返回值。。。

 

由以上的测试可知,当由activity发出startActivityForResult的指令后,结果必然只是返回到activity的OnActivityResult方法中。

由碎片(fragment)直接发出的startActicityForResult的指令后,结果首先经过包裹它的Activity中的OnActivityResult方法,然后才是对应的Fragment中的

  OnActivityResult方法。

转载于:https://www.cnblogs.com/android-er/p/5358459.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个 Android 开发中的方法,用于启动一个新的 Activity 并等待该 Activity 返回结果。该方法可以在当前 Activity 中启动另一个 Activity,并在另一个 Activity 结束后返回结果给当前 Activity。 ### 回答2: startActivityForResult是Android开发中一个用于启动一个Activity并获取其返回结果的方法。 在Android开发中,我们经常需要从一个Activity中启动另一个Activity,并在另一个Activity执行完毕后获取其结果,这时就可以使用startActivityForResult方法。 startActivityForResult方法有两个参数,第一个参数是要启动的Activity的Intent对象,第二个参数是一个整数requestCode,用于标识这个启动操作。通过给启动的Activity设置requestCode,在启动的Activity执行完毕后可以根据requestCode来判断是从哪个Activity返回的结果。 在被启动的Activity中,当执行完要返回的操作后,可以通过setResult方法将结果返回给调用它的Activity,并使用一个resultCode来标识操作的结果。然后调用finish方法关闭当前Activity。 在调用startActivityForResult方法的Activity中,可以重写onActivityResult方法来处理返回的结果。在onActivityResult方法中,可以通过判断resultCode和requestCode来确定是从哪个Activity返回的结果,并根据需要进行相应的处理。 总结起来,使用startActivityForResult方法可以实现在Android应用中不同Activity之间的数据交互。这种方式可以方便地实现一些需要返回结果的场景,比如在一个Activity中选择照片或者获取用户输入的数据等。 ### 回答3: startActivityForResult是一个用于启动新的Activity并接收返回结果的方法。在Android开发中,如果我们需要从一个Activity中启动另一个Activity,并在第二个Activity完成后获取返回结果,就可以使用startActivityForResult方法。 startActivityForResult方法需要传入两个参数:Intent对象和请求码(requestCode)。 1. Intent对象:用于描述要启动的Activity的意图。我们可以通过Intent对象传递数据给要启动的Activity,也可以从启动的Activity中获取返回结果。 2. 请求码(requestCode):用于标识此次启动的请求,以便在第二个Activity完成后能够正确地接收返回结果。 当第二个Activity执行完毕后,会调用setResult方法来设置返回的结果和返回码。然后会自动回调第一个Activity的onActivityResult方法,我们可以在这个方法中获取返回的结果和返回码。 在第一个Activity的onActivityResult方法中,我们可以根据返回码判断是哪个请求的返回结果,并根据需要获取返回的数据。可以通过Intent对象的getXXXExtra方法来获取数据(XXX是数据的类型,例如getIntExtra、getStringExtra等)。 通过startActivityForResult方法,我们可以实现Activity之间的交互和数据传递,提供了更灵活的开发方式。在某些场景下,使用startActivityForResult方法可以更好地满足我们的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值