美文网首页
Fragment中得不到OnActvityResult的返回值问

Fragment中得不到OnActvityResult的返回值问

作者: 黑白岩 | 来源:发表于2019-02-26 15:01 被阅读0次

我们在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 );

相关文章

网友评论

      本文标题:Fragment中得不到OnActvityResult的返回值问

      本文链接:https://www.haomeiwen.com/subject/cwmayqtx.html