You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:22:25