RecyclerView点击跳转Fragment遇空指针异常,求解决方法
解决RecyclerView跳转Fragment时Bundle空指针问题
出现java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference错误,核心原因是接收方Fragment(Kitdetail_Fragment)中获取Bundle时,getArguments()返回了null,或是直接未做判空就调用getString()。
第一步:修正Kitdetail_Fragment的Bundle获取逻辑
在Fragment的生命周期方法(比如onCreateView或onCreate)中,必须先判断getArguments()是否为null,再取值:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_kitdetail, container, false); // 先获取Bundle并判空 Bundle bundle = getArguments(); if (bundle != null) { String name = bundle.getString("name"); // 这里写使用name的业务逻辑 } return view; }
避免直接写getArguments().getString("name")——如果因为某种原因(比如Fragment实例化后未正确设置Arguments)导致getArguments()为null,就会触发空指针。
第二步:优化传递方代码的安全性
你当前的传递逻辑是正确的,可以加两个小优化避免后续隐患:
- 确保
jName的输出符合预期:虽然String.valueOf(jName)已经能处理null,但如果jName是自定义对象,建议重写toString()方法保证输出格式正确。 - 判空Context类型:防止
view.getContext()不是AppCompatActivity的情况:
holder.pics.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString("name", String.valueOf(jName)); Kitdetail_Fragment jerseyFragment = new Kitdetail_Fragment(); jerseyFragment.setArguments(bundle); if (view.getContext() instanceof AppCompatActivity) { AppCompatActivity activity = (AppCompatActivity) view.getContext(); activity.getSupportFragmentManager() .beginTransaction() .replace(R.id.framelay, jerseyFragment) .addToBackStack(null) .commit(); } } });
内容的提问来源于stack exchange,提问作者Amaankhan Pathan
相关产品推荐
相关产品推荐

