Я пытаюсь научиться разрабатывать приложения для 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 ответа
Вам нужно будет использовать
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
.........
Также обратитесь к этому вопросу (у него аналогичный вариант использования): Флажок «Предпочтение» и проверка его включения или отключения
@Abdulhamid Dhaiban правильно указывает на это.
Добавлю к вашему предложению о переопределении метода onBackPressed ().
Если ваша кнопка «Вверх» (вверху слева <-) дает правильный результат, то вы можете настроить кнопку «Назад» так, чтобы она работала как кнопка «Вверх», просто добавив следующий код:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}
Надеюсь, это поможет!
Как сказал @Chisko, в вашем вопросе недостаточно кода, чтобы мы могли определить вашу конечную цель - хотя я предполагаю, что вам нужна какая-то форма постоянного хранилища для вашего приложения, чтобы иметь возможность сохранять настройки вашего приложения . Для этого вы захотите использовать что-то в Android под названием SharedPreferences а>. Это позволяет вам сохранять простые типы данных для последующего доступа.
Прочтите эту ссылку, а затем попробуйте сохранить / загрузить один простой фрагмент данных. Вы захотите загрузить его из SharedPreferences при запуске действия (вы можете указать значение по умолчанию, если оно еще не было сохранено), а затем вы захотите сохранить данные в onBackPressed()
, как вы сказали.
Желаем удачи, и если у вас возникнут какие-либо проблемы, просто прокомментируйте здесь.
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.