代码之家  ›  专栏  ›  技术社区  ›  Nemanja

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

  •  0
  • Nemanja  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前