首选项不会在android中持久存在

时间:2014-07-20 10:47:55

标签: java android android-fragments preferences

我已阅读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。

提前致谢!

2 个答案:

答案 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放置一个直接字符串,而不是字符串中的值,因为您将无法访问已翻译的键值