[Android]fragment中getArguments为空的原因以及解决

2 篇文章 0 订阅
1 篇文章 0 订阅

fragment与Activity通信时,我们常常用在activity中setArgument然后再fragment中用getArgument的方法来获取activity想要传给fragment的数据,但我今天用这个方法时报了空指针异常,耽误了我不少时间,下面我就将产生空指针的原因和解决方法跟大家分享一下。

原因:

 /**
     * Return the arguments supplied when the fragment was instantiated,
     * if any.
     */
    final public Bundle getArguments() {
        return mArguments;
    }

这是getArgument的源码,上面注释的意思就是这个方法使用的前提是fragment未被实例化也就是还没有跟activity绑定,问题就处在这里,我们有时用fragment时使用xml来直接绑定fragment,那么在activity执行onCreat方法的时候fragment就已经被实例化,即使在下面执行如下代码片,已经被绑定的fragment也无法拿到bundle

Fragment unlawLeft = new MineUnLawLeftFgm();
 Bundle bundle = new Bundle();
                bundle.putSerializable("userToFgm",user);
                unlawLeft.setArguments(bundle);
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                //替换容器中的fragment
                fragmentTransaction.replace(R.id.fgmUnlawContainer,unlawLeft);
                //提交事务
                fragmentTransaction.commit();

解决方法:

既然不能用getArgument的方法,我们就绕一下远路用

user = (User) getActivity().getIntent().getSerializableExtra("users");

利用Activity直接获得bundle就可以解决问题啦~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值