我在我的设置活动中有更改语言选项,并且按照建议我创建了内部类片段。 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;
}
};
}