Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

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

So I’m trying to make an options menu in my android app but when I click on it in the emulator the app crashes and I get the following error:

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

I don’t really know what I am doing wrong here, I hope somebody knows.

The settings activity:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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();
    }
}

The fragment class

public class SettingsFragment extends PreferenceFragmentCompat {

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

}

methods in my 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);
    }

EDIT
Here is also my layout file:

<?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>

>Solution :

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

The snippet setPreferencesFromResource(R.xml.preferences, rootKey) is what raises that as it expects a PreferenceGroup instead of a preference view. Where SwitchPreferenceCompat is not PreferenceGroup.

That is because you used a SwitchPreferenceCompat as the root element of settings screen. Instead you need to use the PreferenceScreen which extends from PreferenceGroup.

So to fix this you need to make sure that the root element of your preference layout is PreferenceScreen

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading