Android Fragment间传递对象时出现NullPointerException问题求助
解决Fragment间传递Serializable对象时的NullPointerException问题
你遇到的空指针问题根源非常明确——设置Fragment Arguments的顺序完全搞反了!
先看你发送代码里的致命问题:你先执行了ft.commit()提交事务,之后才调用fragment.setArguments(bundle)。但commit()之后,FragmentTransaction已经把Fragment的状态提交给FragmentManager了,这时候再设置Arguments根本不会生效,所以接收Fragment拿到的getArguments()自然是null,调用getSerializable()就直接触发空指针异常了。
正确的发送代码写法
你需要把setArguments放在commit()之前执行,同时要确保你的Customer类确实实现了Serializable接口(这是putSerializable生效的前提):
// 1. 先创建Bundle并放入要传递的对象 Bundle bundle = new Bundle(); bundle.putSerializable("Object", customer); Log.d("Kapil", "setData: " + customer.getClass().getSimpleName()); // 2. 创建目标Fragment并绑定Arguments CustomerInformationFragment fragment = new CustomerInformationFragment(); fragment.setArguments(bundle); // 3. 最后执行Fragment事务的提交 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); // 别忘了添加Fragment到布局容器,比如 ft.replace(R.id.fragment_container, fragment); ft.commit();
接收端的安全写法
另外,接收端最好先做非空判断,避免后续调用出现意外崩溃:
if (getArguments() != null) { Customer customer = (Customer) getArguments().getSerializable("Object"); if (customer != null) { Log.d("Kapil", "onCreateView: " + customer.getFirstName()); } else { Log.d("Kapil", "onCreateView: 传递的Customer对象为空"); } } else { Log.d("Kapil", "onCreateView: Arguments为空"); }
额外注意事项
- 务必确认
Customer类已经正确实现Serializable接口:public class Customer implements Serializable { // 你的类成员变量和方法 } - 从错误栈里的
FragmentPagerAdapter.finishUpdate能看出来,你可能是在ViewPager场景下使用Fragment,这种情况要确保在PagerAdapter创建Fragment实例的时候就设置好Arguments,不要事后再传递。
内容的提问来源于stack exchange,提问作者H Kapil Kumar
相关产品推荐
相关产品推荐

