java - 在 Android 中创建 ListPreferences

标签 java android xml

我正在尝试在 Android 中创建一个 ListPreference。但是我不想在 XML 中创建所有内容,而是想在 JAVA 中添加 Entries 和 EntriesValues。我有这个 XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <ListPreference android:key="delay"
        android:title="@string/settings_push_delay"
        android:defaultValue="Default">
    </ListPreference>

</PreferenceScreen>

然后我有这个类,扩展 PreferenceActivity:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.prefs);

        final ListPreference listPreference = (ListPreference) findPreference("delay");

        listPreference.setOnPreferenceClickListener(this);

    }

public boolean onPreferenceClick(Preference preference) {

            ListPreference lp = (ListPreference)preference;
            String[] array={"1","2","3"};
            CharSequence[] entries = array;
            CharSequence[] entryValues = array;
            lp.setEntries(entries);
            lp.setDefaultValue("1");
            lp.setEntryValues(entryValues);
            return true;

    }

这只是我正在尝试做的一个测试,所以我可以完全理解如何动态创建首选项。

忘了说我在运行这段代码时遇到了异常:

04-14 00:47:10.432: E/AndroidRuntime(1330): FATAL EXCEPTION: main
04-14 00:47:10.432: E/AndroidRuntime(1330): java.lang.IllegalStateException: ListPreference requires an entries array and an entryValues array.
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.preference.ListPreference.onPrepareDialogBuilder(ListPreference.java:232)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.preference.DialogPreference.showDialog(DialogPreference.java:293)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.preference.DialogPreference.onClick(DialogPreference.java:264)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.preference.Preference.performClick(Preference.java:939)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:202)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.widget.AbsListView$1.run(AbsListView.java:3168)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.os.Handler.handleCallback(Handler.java:605)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.os.Looper.loop(Looper.java:137)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at java.lang.reflect.Method.invokeNative(Native Method)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at java.lang.reflect.Method.invoke(Method.java:511)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-14 00:47:10.432: E/AndroidRuntime(1330):     at dalvik.system.NativeStart.main(Native Method)

我的问题是,我如何在不在 XML 上定义条目和条目值的情况下创建 ListPreference。如何在 JAVA 文件中做到这一点。那么,我该如何解决这个异常呢?

谢谢,

最佳答案

您不能在 onClick 事件中设置 ListPreferenceentriesentryValues 没有entriesentryValues 开始。

而是在 onCreate 中执行。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);

    final ListPreference listPreference = (ListPreference) findPreference("delay");
    String[] array={"1","2","3"};
    CharSequence[] entries = array;
    CharSequence[] entryValues = array;
    listPreference.setEntries(entries);
    listPreference.setDefaultValue("1");
    listPreference.setEntryValues(entryValues);
}

然后,如果您需要在 onClick 监听器中动态设置值,它应该可以正常工作。

关于java - 在 Android 中创建 ListPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23050150/

相关文章:

java - Android Studio 无法运行单个类

android - 如何创建像新市场或 Google plus 这样的 UI?

android - 以编程方式更改可绘制形状的颜色

javascript - 使用 Javascript 访问 XML 中的 <link> 值

c++ - 解析以 UTF-8 编码的 XML

java - 如何使用增强的 for 循环来迭代另一个方法中的 HashSet?

java - 如何将代码包含在函数中

javascript - 解析 XML 和使用 xml-stream 收集子项时出现问题

java - 如何修复连接字符串包含格式错误的名称或值

java - E/错误 JSONException : No value for categories in android