2016-09-07 1 views
0

Я пытаюсь научиться разрабатывать приложения для Android. Я последовал видеоуроку на YouTube, и это закончилось тем, что добавило в приложение простой экран настроек приложения.Сохранить настройки приложения с экрана предпочтений при нажатии кнопки возврата

Однако есть одна проблема, которая меня беспокоит: когда я нажимаю кнопку «Назад» на навигационной панели телефона, измененные настройки не применяются.

Я пробовал поиск в Google, но ни одно из решений, которые я нашел, не сработало. Тот факт, что я еще не понял, что 100% того, что происходит на предлагаемых решениях, также может повлиять на мои трудности при решении этой проблемы.

Поведение, которое я ожидаю от приложения, заключается в том, что, когда я нажимаю кнопку «Назад» на панели навигации, следует применять измененные настройки.

Например, у меня есть настройка темного фона, который управляется флажком. Текущее поведение: я проверяю настройку темного фона. Когда я нажимаю кнопку «Назад» на панели навигации, параметр не применяется (у меня есть метод, который загружает настройки в моей MainActivity). Я хочу, чтобы это произошло, когда я нажимаю кнопку «Назад», в этом случае применяется темный фон.

Из чего я понимаю, я считаю, что переопределение onBackPressed должно сделать трюк, но я не знаю, что должно быть выполнено, чтобы правильно применить настройки.

Вот класс и расположение моего экрана предпочтений. Что касается строк в 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

Добро пожаловать в StackOverflow. Пожалуйста, ознакомьтесь с инструкциями о том, как спросить: http://stackoverflow.com/help/how-to-ask. Вы должны указать в своем описании, какое поведение ожидается. Кроме того, более релевантный фрагмент кода, так как это точно не дает достаточного контекста того, что вы пытаетесь сделать. – Chisko

+0

Добавлено несколько слов на вопрос – tady159

ответ

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

+0

Спасибо, я попробую и вернусь с результатами – tady159

+1

Ваше предложение действительно сработало. Тем не менее, мне пришлось получить SharedPreferences по-другому, по сравнению с вопросом, который вы связали. Метод 'getSharedPreferences' не был доступен внутри слушателя, поэтому вместо этого я использовал' PreferenceManager.getDefaultSharedPreferences (getActivity()) '. Большое спасибо за помощь. – tady159

+0

Рад это слышать, все самое лучшее. –

0

Как @Chisko сказал, что не хватает кода в вашем вопросе для нас, чтобы быть в состоянии понять вашу конечную цель - хотя я предполагаю, что вы хотели некоторую форму постоянного хранения для вашего приложения к сможете сохранить настройки своего приложения. Для этого вам нужно будет что-то использовать в Android под названием SharedPreferences. Это позволяет вам сохранять простые типы данных, которые будут доступны позже.

Дайте этой ссылке прочитать, а затем попробуйте сохранить/загрузить одну простую часть данных. Вы захотите загрузить его из SharedPreferences при запуске операции (вы можете указать значение по умолчанию, если оно еще не было сохранено), а затем вы хотите сохранить данные в onBackPressed(), как вы сказали.

Удачи, и если у вас возникнут какие-либо проблемы, просто прокомментируйте здесь.

+0

Благодарим за помощь. Ответ Абдулхамида Дайбана помог мне решить эту проблему. – tady159

0

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

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

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

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

Надеется, что это помогает!