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

Android Studio使用Fragment创建设置页面点击跳转后应用闪退问题求解

问题根因

报错日志明确指向空指针异常,触发位置为SettingsFragment.java第22行:findPreference("Contact_Preference")返回了null对象,你直接对null对象调用了setOnPreferenceClickListener方法导致闪退。出现这个问题的核心原因是你res/xml/preferences.xml配置文件中,不存在android:key属性为Contact_Preference的Preference项,或者key的拼写/大小写/符号和代码里的字符串不匹配。

修复步骤
  1. 检查res/xml/preferences.xml文件,确认对应Preference项的key配置正确,示例配置如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 注意这里的key要和代码里的Contact_Preference完全一致 -->
    <Preference
        android:key="Contact_Preference"
        android:title="返回首页"
        android:summary="点击跳转到主页面"/>
</PreferenceScreen>
  1. 给代码增加空判断逻辑,避免后续配置改动后再次出现同类闪退,修改后的SettingsFragment.java对应代码如下:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.preferences,rootKey);
    Preference myPref = findPreference("Contact_Preference");
    // 先判空再执行后续操作
    if (myPref != null) {
        myPref.setOnPreferenceClickListener(preference -> {
            startActivity(new Intent(getContext(), MainActivity.class));
            return true;
        });
    }
}
额外优化

你当前SettingsActivity中ActionBar配置重复,将重复行修改后可以正常显示左上角返回箭头:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportFragmentManager().beginTransaction().replace(android.R.id.content,new SettingsFragment()).commit();

    ActionBar menu = getSupportActionBar();
    if (menu != null) {
        menu.setDisplayShowHomeEnabled(true);
        // 把原来重复的setDisplayShowHomeEnabled替换成下面这行
        menu.setDisplayHomeAsUpEnabled(true);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:24:02