按下后退按钮时,从PreferenceScreen保存应用程序首选项

时间:2016-09-07 14:28:45

标签: android

我正在尝试学习如何开发Android应用。我在YouTube上关注了视频教程,最后在应用程序中添加了一个简单的应用程序设置屏幕。

然而,有一点困扰我:当我按手机导航栏上的后退按钮时,不会应用更改的设置。

我尝试在Google上搜索,但我找到的解决方案都没有奏效。事实上,我还不了解所提出的解决方案正在发生的事情的100%,这也可能导致我难以解决这个问题。

我期望从应用程序中获得的行为是,当我按导航栏上的后退按钮时,应该应用更改的设置。

例如,我有一个深色背景设置,由复选框控制。当前的行为是:我检查深色背景的设置。当我按下导航栏上的后退按钮时,不应用该设置(我有一个方法可以在我的MainActivity上加载首选项)。我想要发生的是当我按下后退按钮时,在这种情况下会应用深色背景。

根据我的理解,我相信覆盖onBackPressed应该可以解决问题,但我不知道应该执行什么才能正确应用设置。

以下是我的PreferenceScreen的类和布局。关于XML上的字符串,它们实际上并不是硬编码的。我刚刚在这里复制了英文值,以显示应该出现在界面上的文字。

public class AppPreferences extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_note_detail);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        SettingsFragment settingsFragment = new SettingsFragment();
        fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
        fragmentTransaction.commit();
    }

    public static class SettingsFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.app_preferences);
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:title="General">
        <EditTextPreference
            android:title="Notebook"
            android:summary="The title that will be used on the main action bar."
            android:key="title"
            android:defaultValue="Notebook" />
    </PreferenceCategory>

    <PreferenceCategory
        android:title="Color">
        <CheckBoxPreference
            android:title="Dark Background"
            android:summary="Is the main background color dark?"
            android:key="background_color"
            android:defaultValue="false" />
    </PreferenceCategory>
</PreferenceScreen>

3 个答案:

答案 0 :(得分:0)

就像@Chisko所说,你的问题中没有足够的代码让我们能够找出你的最终目标 - 虽然我猜你想要你的应用程序的某种形式的持久存储能够保存您的应用偏好。为此,您需要在Android中使用名为SharedPreferences的内容。这允许您保存稍后要访问的简单数据类型。

将该链接读取,然后尝试保存/加载一个简单的数据。您希望在启动活动时从SharedPreferences加载它(如果尚未保存,您可以指定默认值),然后您想要在{{1}中保存数据} 如你所说。

祝您好运,如果遇到任何问题,请在此处发表评论。

答案 1 :(得分:0)

您需要使用

public class AppPreferences extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {

    super.onCreate(savedInstanceState);

    //setContentView(R.layout.activity_note_detail);

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    SettingsFragment settingsFragment = new SettingsFragment();
    fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
    fragmentTransaction.commit();
}

public static class SettingsFragment extends PreferenceFragment
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.app_preferences);

        Preference preference = findPreference("background_color");
        preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {

                //do your action here

                return false;
            }
        });
    }
}    

}

或其他活动:

PreferenceManager.setDefaultValues(this, R.xml.your_setting_xml, false);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);

if (settings.getBoolean("background_color", true)) {
 //do your action here

.........

也参考这个问题,(它有类似的用例): Checkbox Preference and Checking if its enabled or disable

答案 2 :(得分:0)