Android Fragment跳转传递CNPJ主键数据失效问题求助
问题修复方案
核心错误原因
你在Register_User_Fragment的跳转逻辑中存在实例使用错误:先创建了Register_Region_Fragment实例并设置了携带CNPJ的参数包,但是调用replace执行跳转时,传入的是全新创建的无参Register_Region_Fragment实例,之前配置好参数的实例没有被实际使用,因此第二屏无法接收到传递的数据。
修复代码
Register_User_Fragment 跳转逻辑修正
将原有跳转部分的代码:
fr = new Register_Region_Fragment(); fr.setArguments(bundle); transaction.replace(R.id.fragment_container_user, new Register_Region_Fragment()); transaction.commit();
修改为:
fr = new Register_Region_Fragment(); fr.setArguments(bundle); // 传入已经配置好参数的实例,而非新建实例 transaction.replace(R.id.fragment_container_user, fr); transaction.commit();
可选优化建议
- 可以在
Register_Region_Fragment中新增静态实例创建方法,统一封装参数传递逻辑,避免后续出现同类传参遗漏问题:
public static Register_Region_Fragment newInstance(String cnpj) { Register_Region_Fragment fragment = new Register_Region_Fragment(); Bundle args = new Bundle(); args.putString("CNPJ", cnpj); fragment.setArguments(args); return fragment; }
后续跳转时直接调用下方代码即可,无需单独处理参数包配置:
transaction.replace(R.id.fragment_container_user, Register_Region_Fragment.newInstance(CNPJ));
- 可在
Register_Region_Fragment的onViewCreated中增加空值判断,避免参数为空时出现异常,同时如果不需要用户修改CNPJ,可以直接将输入框设为不可编辑:
String enterprise = getEnterprise(); if (enterprise != null) { cnpj.setText(enterprise); cnpj.setEnabled(false); }
内容的提问来源于stack exchange,提问作者Marrows
相关产品推荐
相关产品推荐

