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

Android Fragment中RadioButton点击跳转Activity闪退如何解决

问题根因
  • 核心潜在原因1:Specialist.class/Doctor.class未在项目AndroidManifest.xml中注册,安卓要求所有Activity必须在清单文件声明才能跳转,未声明会直接触发崩溃。
  • 核心潜在原因2:Intent初始化时机不合理。你当前在onCreateView生命周期中直接调用getActivity()创建Intent,若此时Fragment还未完成和宿主Activity的绑定,getActivity()会返回null,触发空指针异常导致闪退。
  • 可选优化点:给单选组的每个RadioButton单独设点击事件不符合RadioGroup的使用规范,推荐统一监听选中状态变化,代码更易维护。
修复后的实现代码

首先需要在AndroidManifest.xml中注册两个目标Activity,代码如下:

<!-- 加到AndroidManifest.xml的<application>标签内部 -->
<activity android:name=".Specialist"/>
<activity android:name=".Doctor"/>

修改后的Fragment2.java代码:

package com.example.tabbedapp;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Fragment2 extends Fragment {
    public Fragment2(){

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment2_layout, container, false);
        // 获取单选组实例
        RadioGroup radioGroup = rootView.findViewById(R.id.G1);
        // 统一监听选中状态变化
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // 点击时再获取context创建Intent,避免空指针
                if (getActivity() == null) return;
                Intent intent = null;
                if (checkedId == R.id.R1) {
                    intent = new Intent(getActivity(), Specialist.class);
                } else if (checkedId == R.id.R2) {
                    intent = new Intent(getActivity(), Doctor.class);
                }
                if (intent != null) {
                    startActivity(intent);
                }
            }
        });
        return rootView;
    }
}
额外说明
  • 如果修复后仍闪退,可以通过Logcat筛选AndroidRuntime标签查看具体崩溃堆栈,定位其他潜在问题。
  • 若跳转时需要传递参数,可在Intent创建后调用putExtra()方法传入对应数据。

内容的提问来源于stack exchange,提问作者Suji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:06:01