Предпочтение в PreferenceFragment не обновляется
У меня есть основное действие, которое загружает PreferenceFragment (его часть actionBar).
В PreferenceFragment я загружаю свои настройки из XML-файла:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
Проблема в том, что если я изменяю вкладку (помните, что она управляется с помощью ActionBar), меняю одно из предпочтений в другом фрагменте и возвращаюсь к моему preferenceFragment, который не обновляется. В частности, проблема заключается в SwitchPreference(true/false), который может быть изменен из разных фрагментов и даже с помощью удаленных вызовов (тогда предпочтение меняется в общих настройках. ДА Я зафиксировал изменение).
Я искал разные решения, но, честно говоря, я не нашел подходящего. Мои собственные идеи следующие:
Моя проблема была бы решена, если бы я мог получить элемент Switch переключателя, чтобы я мог установить переключатель в значение true в методе onStart() или onResume(). Но есть ли изменение, чтобы получить объект Switch? Если бы я загружал обычную раскладку, я мог бы получить доступ к переключателю следующим образом:
View v = inflater.inflate(R.layout.start_fragment, container, false);
Switch status = (Switch) v.findViewById(R.id.switch1);
После этого я смогу установить положение переключателя следующим образом:
status.setChecked(true);
Другим решением было бы уничтожить фактическое представление и снова вызвать addPreferencesFromResource(), но, если честно, я понятия не имею, как это можно сделать....
Третье решение может заключаться в использовании OnCheckedChangeListener в моем PreferenceFragment, но проблема снова будет заключаться в том, как изменить / обновить переключатель.
Я уверен, что предпочтение обновлено правильно, потому что я запускаю OnSharedPreferenceChangeListener в одном из моих сервисов, и для устранения этой проблемы я заставил слушателя регистрировать состояние моего switchPreference.
Вы можете помочь мне как-нибудь?
к сожалению, я не могу ответить на свой вопрос до завтрашнего утра, поэтому я редактирую свой вопрос:
Спасибо, ребята, я не хочу перезапускать основную деятельность, а только фрагмент.
К счастью, я нашел подсказку в этой теме: как обновить PreferenceActivity, чтобы показать изменения в настройках?
Я действительно могу получить доступ к SwitchPreference так просто. Мое решение:
private SwitchPreference pref_phone_locked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
status = (SwitchPreference) findPreference("status");
}
public void onStart(){
super.onStart();
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
if(sharedPref.getBoolean("status", false)){
status.setChecked(true);
}else{
status.setChecked(false);
}
}
Таким образом, я могу просто привести Preference к SwitchPreference и изменить его после каждого вызова onStart(). Я думаю, это лучшее решение для моей проблемы.
Надеюсь, этот ответ сэкономит кому-то время в будущем =) Еще раз спасибо вам, ребята!
1 ответ
Я не уверен, что это будет работать для вас (у меня есть базовые знания об Android), но я нашел это решение в аналогичном вопросе, и оно работает очень хорошо для меня
private void simulateRefresh(){
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
В основном это уничтожает и воссоздает деятельность без анимации между ними.
Нашел здесь