我们在Fragment中使用startActivityForResult()方法打开一个Activity,并需要获取Activity销毁时通过onActivityResult()传递数据给打开他的Fragment.一般是没有问题的,
但是如果这个Fragment依附的结构是 Activity + ViewPager + Fragment ;那么这个Fragment的onActivityResult()方法就获取不到数据了(被那个依附的底层的Activity 接受了), 这时候我们只需要在这个FragmentActivity的onActivityResult()中获取到这个Fragment的对象(通过tag),然后调用这个fragment中的onActivityResult()就可以将值传到这个fragment中了
如下: 在Activity中的OnActivityResult()中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(mineFragment.getTag());
fragmentByTag.onActivityResult(requestCode, resultCode, data);
}
然后在你的Fragment 的OnActivityResult()方法中才能获取数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//这里执行你的代码
}
注意 下面的方法中此Fragment 我们需要在初始化中创建出来 负责会有空指针异常 找不到Fragment.
findFragmentByTag(mineFragment.getTag())
我们在写ViewPager时 在初始化时习惯了这样写
fragments = new ArrayList<>();
fragments.add(0, new HomeFragment());
fragments.add(1, new ShoppingCartFragment());
fragments.add(2, new ShoppingCartFragment);
fragments.add(3, new MineFragment());
supportFragmentManager = getSupportFragmentManager();
mainPagerAdapter = new MainPagerAdapter(supportFragmentManager, fragments);
这样写 我们在OnActvityResult()方法中 是使用一下方法 是有问题的 因为MineFragment 并没有初始化 只是在一开会new 一个对象
supportFragmentManager.findFragmentByTag(MineFragment.class.getSimpleName());
正确的写法是:
mineFragment = new MineFragment()
fragments.add(3, mineFragment );