静态设置片段中的setPreferenceScreen()-刷新设置活动

时间:2018-07-05 21:32:12

标签: android methods static fragment

我在我的设置活动中有更改语言选项,并且按照建议我创建了内部类片段。 Android Studio表示它必须是静态的(内部片段),如果不是,它将崩溃(测试并发生)。它中的所有其他方法都必须是静态的并且可以正常工作,除非现在我需要

setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);

,因此它将重新启动显示语言更改的首选项。但是,这两个方法不能在静态方法中,我将它们放在必须是静态的首选项更改侦听器中!那么有什么办法解决这个问题?

public class SettingsActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }

    public static class SettingsFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.preferences);

            bindSummaryValue(findPreference("pref_key_delay"));


    private static void bindSummaryValue(Preference preference) {
        preference.setOnPreferenceChangeListener(listener);
        listener.onPreferenceChange(preference,
                PreferenceManager.getDefaultSharedPreferences(preference.getContext())
                        .getString(preference.getKey(), ""));
    }

    private static Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {

            String mString = newValue.toString();
            if (preference instanceof ListPreference) {
                ListPreference mListPreference = (ListPreference) preference;
                int index = mListPreference.findIndexOfValue(mString);
                preference.setSummary(index >= 0 ? mListPreference.getEntries()[index] : null);
            }
            else if (preference instanceof EditTextPreference) {
                preference.setSummary(mString);
            }

            return true;
        }
    };


}

0 个答案:

没有答案