Предпочтение в 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);
}

В основном это уничтожает и воссоздает деятельность без анимации между ними.

Нашел здесь

Другие вопросы по тегам