无法获得简单的PreferenceFragment示例

时间:2012-11-23 10:48:32

标签: android sharedpreferences fragment

我正在努力使用PreferenceFragments,似乎无法让它工作。

我有一个首选项文件,名为at.package.preferences(没有GUI)来保存内部值 - 这可行。

现在我不想为用户创建其他(公共)设置的首选项屏幕,但这里是我失败的地方。 我的代码:

    public class ChartPreferences extends Activity {

        private SharedPreferences prefs;
        private Button btn;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_chart_preferences);

            prefs = PreferenceManager.getDefaultSharedPreferences(this);

            btn = (Button) findViewById(R.id.button1);

            getFragmentManager().beginTransaction().replace(R.id.prefs_chart_content, 
            new ChartPrefsFragment()).commit();

            btn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(ChartPreferences.this, getLineSize(), Toast.LENGTH_SHORT).show();                
                }
            });

        }

        public int getLineSize()
        {

            return Integer.valueOf(prefs.getString(getString(R.string.line_size_key), Helper.PREF_DEFAULT_LINE_SIZE));
        }

        public static class ChartPrefsFragment extends PreferenceFragment
        {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.chart_prefs);  
            }           

        }
    }

所以首选项屏幕会显示,当我选择一个值时,让我们说5,从首选项列表中,它也可以。当我再次打开首选项列表时,仍然会选择5(因此首选项会被保存 - 某处......)

现在,当我尝试访问保存的值时,getLineSize()函数中出现问题。它给了我一个android.content.res.Resources $ NotFoundException。

我不知道PreferenceScreen的值保存在哪里,但它似乎不在defaultSharedPreferences(?)

这是我的chart_prefs.xml,以防万一:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/chart" android:summary="@string/chart">
        <ListPreference android:entries="@array/prefs_line_size" android:title="@string/line_size" android:summary="@string/line_size" android:key="@string/line_size_key" android:entryValues="@array/prefs_line_size"/>
    </PreferenceCategory>

</PreferenceScreen>

1 个答案:

答案 0 :(得分:0)

使用android:key =“@ string / line_size_key”似乎很奇怪,即您的首选项名称是资源查找。我没有看过Preference的代码,但也许它没有解析字符串,只是使用'@ string / line_size_key'作为保存首选项的标记。

您真的不希望您的偏好名称是资源查找吗?这意味着当用户在其设备上更改语言时,首选项将消失。