论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方法。

posted on 2016-04-06 11:16  2013551627  阅读(1205)  评论(0编辑  收藏  举报