programmablecat
programmablecat

Reputation: 11

MultiSelectListPreference crashes with dependency

I have a CheckBoxPreference(key=time_remaining_vibrate) preference and a MultiSelectListPreference(key=time_remaining_vibrate_times), and I want the MultiSelectListPreference to be dependent on the CheckBoxPreference but whenever I add the "android:dependency="time_remaining_vibrate"" to the XML file, my app crashes. Oddly enough, if I change the MultiSelectListPreference to a ListPreference, then it no longer crashes, but I need the MultiSelect preference. Here are are the relevant files and probably some irrelevant ones :)

Edit: My API version is 19, if that matters, so I know that the MultiSelectListPreference is supported.

EDIT: SOLUTION: I needed to add android:defaultValue="@array/empty_array" to the MultiSelectListPreference. Thanks to Michiyo for this answer :). The other problem I had was a string cannot be cast as set exception, but that was fixed by clearing the app's data in settings.

preferences.xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">


<CheckBoxPreference
        android:key="early"
        android:title="@string/early"
        android:summary="@string/early_summ"
        android:defaultValue="false"/>

<PreferenceCategory
        android:title="@string/time_remaining"
        android:key="time_remaining">

    <CheckBoxPreference
            android:key="time_remaining_vibrate"
            android:title="@string/remain_vibrate"
            android:summary="@string/remain_vibrate_summ"
            android:disableDependentsState="true"
            android:defaultValue="false"/>

    <MultiSelectListPreference
            android:key="time_remaining_vibrate_times"
            android:title="@string/remain_vibrate_times"
            android:summary="@string/remain_vibrate_times_summ"
            android:entries="@array/empty_array"
            android:entryValues="@array/empty_array"
            android:dependency="time_remaining_vibrate"/>

</PreferenceCategory>


</PreferenceScreen>

SettingsFragment.java

import android.os.Bundle;
import android.preference.PreferenceFragment;


public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
}

}

SettingsActivity.java:

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceManager;


public class SettingsActivity extends Activity {

public static final String PREFS_NAME = "userSettings.txt";

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

    PreferenceManager.setDefaultValues(this,R.xml.preferences,false);
}


}

Log:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.Schedule/com.example.Schedule.SettingsActivity}: android.view.InflateException: Binary XML file line #23: Error inflating class java.lang.reflect.Constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class java.lang.reflect.Constructor
at android.preference.GenericInflater.createItem(GenericInflater.java:397)
at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
at android.preference.GenericInflater.inflate(GenericInflater.java:326)
at android.preference.GenericInflater.inflate(GenericInflater.java:263)
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:285)
at com.example.Schedule.SettingsFragment.onCreate(SettingsFragment.java:21)
at android.app.Fragment.performCreate(Fragment.java:1755)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:868)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1106)
at android.app.BackStackRecord.run(BackStackRecord.java:690)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1571)
at android.app.Activity.performStart(Activity.java:5321)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2558)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.preference.GenericInflater.createItem(GenericInflater.java:383)
at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
at android.preference.GenericInflater.inflate(GenericInflater.java:326)
at android.preference.GenericInflater.inflate(GenericInflater.java:263)
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:285)
at com.example.Schedule.SettingsFragment.onCreate(SettingsFragment.java:21)
at android.app.Fragment.performCreate(Fragment.java:1755)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:868)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1106)
at android.app.BackStackRecord.run(BackStackRecord.java:690)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1571)
at android.app.Activity.performStart(Activity.java:5321)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2558)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.preference.MultiSelectListPreference.onGetDefaultValue(MultiSelectListPreference.java:212)
at android.preference.Preference.<init>(Preference.java:268)
at android.preference.DialogPreference.<init>(DialogPreference.java:69)
at android.preference.DialogPreference.<init>(DialogPreference.java:90)
at android.preference.MultiSelectListPreference.<init>(MultiSelectListPreference.java:49)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.preference.GenericInflater.createItem(GenericInflater.java:383)
at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
at android.preference.GenericInflater.inflate(GenericInflater.java:326)
at android.preference.GenericInflater.inflate(GenericInflater.java:263)
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:285)
at com.example.Schedule.SettingsFragment.onCreate(SettingsFragment.java:21)
at android.app.Fragment.performCreate(Fragment.java:1755)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:868)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1106)
at android.app.BackStackRecord.run(BackStackRecord.java:690)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1571)
at android.app.Activity.performStart(Activity.java:5321)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2558)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)

If anyone can point me in the direction of my probably simple mistake, or the reason why my app crashes, I would be forever thankful!

Thanks

Upvotes: 1

Views: 731

Answers (0)

Related Questions