我正在努力使用 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>