Я пытаюсь научиться разрабатывать приложения для 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>
0
tady159 7 Сен 2016 в 17:28

3 ответа

Лучший ответ

Вам нужно будет использовать

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

.........

Также обратитесь к этому вопросу (у него аналогичный вариант использования): Флажок «Предпочтение» и проверка его включения или отключения

0
Community 23 Май 2017 в 12:09

@Abdulhamid Dhaiban правильно указывает на это.

Добавлю к вашему предложению о переопределении метода onBackPressed ().

Если ваша кнопка «Вверх» (вверху слева <-) дает правильный результат, то вы можете настроить кнопку «Назад» так, чтобы она работала как кнопка «Вверх», просто добавив следующий код:

@Override
public void onBackPressed() {
    super.onBackPressed();
    NavUtils.navigateUpFromSameTask(this);
}

Надеюсь, это поможет!

0
borb183 29 Янв 2017 в 09:38