Fragment中使用Intent跳转导致应用崩溃的解决方法
解决ViewPager中LoginFragment跳转崩溃的问题
嘿,我看了你的代码,问题很明显是**空指针异常(NullPointerException)**导致的崩溃,咱们一步步来排查和修复:
代码里的几个关键错误
- 控件初始化顺序完全颠倒:你在还没加载Fragment布局的情况下,就尝试调用
findViewById,而且还把Button变量初始化为null后直接调用方法,这必然触发空指针。 getView()使用时机错误:在onCreateView方法中,getView()只有在你返回加载好的view之后才会有效,提前调用它会得到null,导致通过它查找EditText时崩溃。- 控件ID大小写不匹配:XML里登录按钮的ID是
LoginButton(大写B),但你代码里写的是R.id.Loginbutton(小写b),这会导致找不到按钮控件,同样触发空指针。
修正后的完整代码
public class LoginFragment extends Fragment { View view; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 第一步:先加载当前Fragment的布局 view = inflater.inflate(R.layout.fragment_login, container, false); // 第二步:通过已加载的view对象查找所有控件 Button b = view.findViewById(R.id.LoginButton); // 注意ID和XML完全匹配 EditText e = view.findViewById(R.id.user); EditText e1 = view.findViewById(R.id.pass); // 第三步:给按钮设置点击跳转事件 b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent l = new Intent(getActivity(), AfterLogin.class); startActivity(l); } }); return view; } public LoginFragment() {} }
几个重要的注意事项
- 永远遵循先加载布局,再查找控件的顺序,不要在inflate布局之前尝试获取任何视图控件。
- Android的资源ID是严格区分大小写的,一定要保证Java代码里的ID和XML布局中的完全一致。
- 不要给控件变量赋
null初始值后直接调用方法,必须让变量指向实际存在的控件实例后再操作。
内容的提问来源于stack exchange,提问作者Jithin Joseph
相关产品推荐
相关产品推荐

