【问题标题】:ListPreference does not save correctlyListPreference 未正确保存
【发布时间】:2011-12-27 16:18:23
【问题描述】:

最近几天,我一直在尝试让 listpreference 在我的应用程序上工作,但无济于事。看了无数帖,还是一无所获。

请注意,显然我仍处于学习过程中,所以我的知识至少可以说是相当有限的。

我正在尝试制作一个程序,允许用户轻松更改 ROM 上的某些系统参数。

public class MyPersArray extends PreferenceActivity implements OnSharedPreferenceChangeListener {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pers);
            getPrefs();

[....]

public String ListPreference; 

    private void getPrefs() {  
        // Get the xml/preferences.xml preferences  
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
        // register preference change listener
        prefs.registerOnSharedPreferenceChangeListener(this);
        ListPreference = prefs.getString("gpsPref", "0");
    }  


    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {      
        if(Integer.valueOf(ListPreference) == 0) {
            ListPreference = prefs.getString("gpsPref", "0");
            Commands.doGps0();
            Toast.makeText(getApplicationContext(), "0",Toast.LENGTH_SHORT).show();
        } else if(Integer.valueOf(ListPreference) == 1) {
            ListPreference = prefs.getString("gpsPref", "1");
            Commands.doGps1();
            Toast.makeText(getApplicationContext(), "1",Toast.LENGTH_SHORT).show();
        } else if(Integer.valueOf(ListPreference) == 2) {
            ListPreference = prefs.getString("gpsPref", "2");
            Commands.doGps2();
            Toast.makeText(getApplicationContext(), "2",Toast.LENGTH_SHORT).show();
        } else if(Integer.valueOf(ListPreference) == 3) {
            ListPreference = prefs.getString("gpsPref", "3");
            Commands.doGps3();
            Toast.makeText(getApplicationContext(), "3",Toast.LENGTH_SHORT).show();
        } else if(Integer.valueOf(ListPreference) == 4) {
            ListPreference = prefs.getString("gpsPref", "4");
            Commands.doGps4();
            Toast.makeText(getApplicationContext(), "4",Toast.LENGTH_SHORT).show();
        } else if(Integer.valueOf(ListPreference) == 5) {
            ListPreference = prefs.getString("gpsPref", "5");
            Toast.makeText(getApplicationContext(), "5",Toast.LENGTH_SHORT).show();
            Commands.doGps5();
        }
    }

这是我用于偏好设置的代码。

我的 xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <ListPreference
        android:defaultValue="0"
        android:dialogTitle="Pick your Region"
        android:enabled="true"
        android:entries="@array/gps_entries"
        android:entryValues="@array/gps_values"
        android:key="gpsPref"
        android:negativeButtonText="Cancel"
        android:summary="Enhance GPS signal and speed"
        android:title="GPS Preference" >
    </ListPreference>
</PreferenceScreen>

我的数组看起来像这样:

<string-array name="gps_values">
    <item>0</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</string-array>
<string-array name="gps_entries">
    <item>Europe</item>
    <item>Africa</item>
    <item>Asia</item>
    <item>Australia</item>
    <item>North America</item>
    <item>South America</item>
</string-array>

首选项代码和 getPrefs 代码包含在同一个 java 文件中。这是我发现它“工作”的唯一方法。

问题在于,使用此代码时,ListPreference 无法正确更新,并且在单击 ListPreference 时不会执行命令。只有当我再次点击 GPS 配置项时它才会更新。

这是一个小屏幕截图,以便您更好地理解。 http://i42.tinypic.com/t7bebq.png(还不能发图片)

非常感谢您的宝贵时间。

【问题讨论】:

  • 你应该给你的变量 ListPreference 一个以小写字符开头的名字。开启 int 值,第三,使用 doGps 的参数,你的代码将是 6 行而不是 30 行。
  • 我是新手,如我所述,您能否提供更多信息?

标签: android save listpreference


【解决方案1】:

最后自己修好了。我的 prefs 类和 sharedpreference manager 调用者在同一个 prefs 类中使用,因此在实例重新启动后它会被保存。

添加

onSharedPreferenceChanged 中的 getPrefs 修复了它。

【讨论】:

  • 也实现了onPreferenceChangedListener而不是SharedPrefsListener,好多了。
猜你喜欢
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 2019-03-14
  • 2012-01-29
相关资源
最近更新 更多