首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MultiSelectListPreference示例

MultiSelectListPreference示例
EN

Stack Overflow用户
提问于 2012-06-19 04:10:32
回答 2查看 31.8K关注 0票数 23

我很难找到Android API中提供的MultiSelectListPreference的好例子。我看过很多对this blog的引用,虽然这是我想要的最终结果,但我不想为我想要实现的每个多选首选项创建一个类。最终,我希望看到一个简单的多选对话框的首选项xml (我将动态填充该对话框的值),以及对addPreferencesFromResource(R.xml.preferences);的调用

目前,我有:

<MultiSelectListPreference
    android:defaultValue=""
    android:enabled="true"
    android:entries="@array/pref_default_entries"
    android:entryValues="@array/pref_default_values"
    android:key="TargetList"
    android:persistent="true"
    android:summary="@string/TargetSummary"
    android:title="@string/TargetTitle" />

当我试图在我的Activities调用中调用addPreferencesFromResource时,我得到了以下错误:

06-18 13:59:30.690: E/AndroidRuntime(6052): FATAL EXCEPTION: main
06-18 13:59:30.690: E/AndroidRuntime(6052): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tracker/com.tracker.TrackerActivity}: android.view.InflateException: Binary XML file line #37: Error inflating class java.lang.reflect.Constructor
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1818)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.access$500(ActivityThread.java:122)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1027)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.os.Looper.loop(Looper.java:132)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.main(ActivityThread.java:4126)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at java.lang.reflect.Method.invokeNative(Native Method)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at java.lang.reflect.Method.invoke(Method.java:491)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at dalvik.system.NativeStart.main(Native Method)
06-18 13:59:30.690: E/AndroidRuntime(6052): Caused by: android.view.InflateException: Binary XML file line #37: Error inflating class java.lang.reflect.Constructor
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.createItem(GenericInflater.java:397)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.inflate(GenericInflater.java:326)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.inflate(GenericInflater.java:263)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:269)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1366)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at com.tracker.TrackerActivity.onCreate(TrackerActivity.java:30)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782)
06-18 13:59:30.690: E/AndroidRuntime(6052):     ... 11 more
06-18 13:59:30.690: E/AndroidRuntime(6052): Caused by: java.lang.reflect.InvocationTargetException
06-18 13:59:30.690: E/AndroidRuntime(6052):     at java.lang.reflect.Constructor.constructNative(Native Method)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at java.lang.reflect.Constructor.newInstance(Constructor.java:416)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.GenericInflater.createItem(GenericInflater.java:383)
06-18 13:59:30.690: E/AndroidRuntime(6052):     ... 21 more
06-18 13:59:30.690: E/AndroidRuntime(6052): Caused by: java.lang.NullPointerException
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:215)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.content.res.Resources.getTextArray(Resources.java:435)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.content.res.TypedArray.getTextArray(TypedArray.java:628)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.MultiSelectListPreference.onGetDefaultValue(MultiSelectListPreference.java:210)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.Preference.<init>(Preference.java:257)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.DialogPreference.<init>(DialogPreference.java:69)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.DialogPreference.<init>(DialogPreference.java:90)
06-18 13:59:30.690: E/AndroidRuntime(6052):     at android.preference.MultiSelectListPreference.<init>(MultiSelectListPreference.java:49)
06-18 13:59:30.690: E/AndroidRuntime(6052):     ... 24 more

期待您的回复!

EN

回答 2

Stack Overflow用户

发布于 2012-08-02 20:39:20

您需要指定defaultValues属性

<MultiSelectListPreference
        android:dialogTitle="@string/mode_repeat"
        android:key="mode_repeat"
        android:summary=""        
        android:title="@string/mode_repeat"
        android:entries="@array/weekdays"
        android:entryValues="@array/weekdays_values"
        android:defaultValue="@array/empty_array"
        />

如果您不需要缺省值,请在strings.xml中创建一个空数组

<string-array name="empty_array"/>
票数 48
EN

Stack Overflow用户

发布于 2020-05-01 17:46:00

您可以在运行时执行此操作,只需像下面这样设置值/条目

findPreference<MultiSelectListPreference>(getString(R.string.preference_key_some_apps))?.apply {
            val entryDisplay =
                listOf("Facebook Messenger", "Whatsapp", "Telegram", "SMS").toTypedArray()
            val entryValuesApps = listOf(
                Constants.FACEBOOK_MESSENGER_PACKAGE_NAME,
                Constants.WHATSAPP_PACKAGE_NAME,
                Constants.TELEGRAM_PACKAGE_NAME,
                Constants.SMS_MESSENGER_PACKAGE_NAME_HOLDER
            ).toTypedArray()

            entries = entryDisplay
            this.entryValues = entryValuesApps
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11090304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档