android - 关于安卓首选项

标签 android arrays sharedpreferences preferences

我的问题是,当我试图从 listpreference 中选择一个项目时,摘要更改为从数组 settings_listofitems_keys 中选择的数组键。
但我想在布局上将摘要设置为数组 settings_listofitems_values 中的用户可读格式,同时将该值从 settings_listofitems_keys 中保存为首选项中的参数。

Xml 数组文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="settings_listofitems_values">
        <item>Green</item>
        <item>Orange</item>
    </string-array> 
    <string-array name="settings_listofitems_keys">
        <item>1</item>
        <item>2</item>
    </string-array>  
</resources>

Xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/settings_select_horo" >
        <ListPreference
            android:defaultValue="@string/settings_selectitem"
            android:key="preferenceitem"
            android:entries="@array/settings_listofitems_values"
            android:summary="@string/settings_plsselect"
            android:entryValues="@array/settings_listofitems_keys"
            android:title="@string/settings_plsselect" />
    </PreferenceCategory>
</PreferenceScreen>

代码:

public class UserSettingActivity extends PreferenceActivity implements
        OnPreferenceChangeListener {
    private static final String APP_PREFERENCES = "mypref";
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.layout.activity_preferences);
            SharedPreferences settings = getSharedPreferences(APP_PREFERENCES,
                        Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = settings.edit();
            ListPreference myid = (ListPreference)
                        findPreference("preferenceitem");
            myid.setOnPreferenceChangeListener(this);
            editor.commit();
    }
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        preference.setSummary(newValue.toString());
        return true;
    }
}

非常感谢任何帮助。我也可以成为新手的好榜样 =)

最佳答案

编辑器、提交和首选项的所有这些都不起作用 - 改变它!

public class UserSettingActivity extends PreferenceActivity implements
        OnPreferenceChangeListener {
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.layout.activity_preferences);
            ListPreference myid = (ListPreference)
                        findPreference("preferenceitem");
            myid.setOnPreferenceChangeListener(this);
    }
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        preference.setSummary(newValue.toString()); // that's ok
        return true;
    }
}

这是您的问题 - 您必须删除摘要行:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/settings_select_horo" >
        <ListPreference
            android:defaultValue="@string/settings_selectitem"
            android:key="preferenceitem"
            android:entries="@array/settings_listofitems_values"
            <!-- android:summary="@string/settings_plsselect"-->
            android:entryValues="@array/settings_listofitems_keys"
            android:title="@string/settings_plsselect" />
    </PreferenceCategory>
</PreferenceScreen>

关于android - 关于安卓首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503049/

相关文章:

java - 使 Sprite 保持在顶部并位于屏幕 View 中

android - SQLiteQueryBuiler.setProjectionMap() 不影响 where 子句

android - 强制 BarChart Y 轴标签为整数?

javascript - 有没有办法更新 HTML 中定义的现有数组?

ios - 将数组保存到 CoreData Swift

java - 如何将 sharedpref.getstringset 的每个值添加到数组列表?

android - SQLite 外键从另一个表获取值

javascript - 为什么需要复制数组才能对其使用方法?

android - 如何根据Android中的共享首选项显示来自MySQL的数据?

android - 共享首选项对私有(private)数据安全吗?