androidx.preference.SwitchPreferenceCompat 无法转换为 androidx.preference.PreferenceGroup

androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.PreferenceGroup

所以我想在我的 android 应用程序中创建一个选项菜单,但是当我在模拟器中单击它时,应用程序崩溃了,并且出现以下错误:

androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.PreferenceGroup

我真的不知道我做错了什么,我希望有人知道。

设置activity:

public class SettingsActivity extends AppCompatActivity {
    public static final String KEY_PREF_EXAMPLE_SWITCH = "example_switch";

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

片段class

public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState,
                                    String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }

}

我的 MainActivity 中的方法:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        // Launch SettingsActivity
        if (id == R.id.action_settings) {
            Intent intent = new Intent(this, SettingsActivity.class);
            startActivity(intent);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

编辑 这也是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<SwitchPreferenceCompat xmlns:android="http://schemas.android.com/apk/res/android">

    <SwitchPreference
        android:defaultValue="false"
        android:key="vega_preference"
        android:summaryOff="@string/vega_off_string"
        android:summaryOn="@string/vega_on_string"
        android:title="@string/vega_switch_title" />
    <SwitchPreference
        android:defaultValue="false"
        android:key="vegan_preference"
        android:summaryOff="@string/vegan_off_string"
        android:summaryOn="@string/vegan_on_string"
        android:title="@string/vegan_switch_title" />
</SwitchPreferenceCompat>

androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.PreferenceGroup

代码段 setPreferencesFromResource(R.xml.preferences, rootKey) 引发了它,因为它期望 PreferenceGroup 而不是偏好视图。其中 SwitchPreferenceCompat 不是 PreferenceGroup.

那是因为您使用了 SwitchPreferenceCompat 作为设置屏幕的根元素。相反,您需要使用从 PreferenceGroup.

扩展的 PreferenceScreen

因此,要解决此问题,您需要确保首选项布局的根元素是 PreferenceScreen