我已阅读here,首选项会自动保留。我已尝试按照说明操作,但复选框始终具有默认值。我的代码如下:
1)我有一个打开“首选项”屏幕的菜单:
int id = item.getItemId();
if (id == R.id.action_settings) {
{
Intent myIntent = new Intent(this, PreferencesActivity.class);
startActivity(myIntent);
}
2)首选项Fragment类,用于加载设置:
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_screen);
}
}
3)加载片段的活动:
public class PreferencesActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
首选项屏幕xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference android:enabled="true"
android:title="@string/ShowAdsTitle"
android:summaryOn="@string/ShowAdsOnPreference"
android:selectable="true"
android:summaryOff="@string/ShowAdsOnPreference"
android:key="@string/value_showads_preference"/>
</PreferenceScreen>
不知怎的,我的设置并不持久。我为每个设置设置了android:key。
提前致谢!
答案 0 :(得分:1)
它适合我,所以我要描述我的步骤:
onCreate中的MainActivity中的:
Intent myIntent = new Intent(this, PrefActivity.class);
startActivity(myIntent);
这将打开“首选项活动”。
public class PrefActivity extends Activity
{
@TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
这将启动SettingsFragment。
@TargetApi(Build.VERSION_CODES.HONEYCOMB) public class SettingsFragment extends PreferenceFragment
{
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_screen);
}
}
这是设置xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:enabled="true"
android:title="show ads"
android:summaryOn="show ads on"
android:selectable="true"
android:summaryOff="show ads on"
android:key="value"/>
</PreferenceScreen>
我不确定Preferences.class是什么类,但可能是问题所在。无论如何,这段代码是有效的,它可以很好地检查和取消选择首选项,并在返回表单后保持这种方式:)
答案 1 :(得分:1)
android:key="value"/>
尝试为android:key放置一个直接字符串,而不是字符串中的值,因为您将无法访问已翻译的键值