После того, как я изменил язык с помощью метода languages.setOnPreferenceChangeListener()
, я не могу сразу увидеть изменение языка. После перезапуска приложения меняются все строки, кроме тех, что указаны на экране настроек. Как изменить строки во фрагменте? Вот мой код в SettingsActivity. java
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
Fragment settingsFragment = new Fragment();
getSupportFragmentManager().beginTransaction().replace(R.id.settings, settingsFragment).commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
getSupportFragmentManager().beginTransaction().detach(settingsFragment).attach(new SettingsFragment()).commit();
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return false;
}
public static class SettingsFragment extends PreferenceFragmentCompat {
ListPreference languages;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
languages = getPreferenceManager().findPreference("language");
languages.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean anyChanges = false;
if (newValue.toString().equals("turkish")) {
LocaleHelper.setLocale(getContext(), "tr");
anyChanges = true;
}
if (newValue.toString().equals("english")) {
LocaleHelper.setLocale(getContext(), "en");
anyChanges = true;
}
if (anyChanges) {
//Here I want to change the language of the titles
}
return true;
}
}
);
return super.onCreateView(inflater, container, savedInstanceState);
}
}
}