Опция выбора языка в SettingsFragment для пользователя не работает в Android API 28 - PullRequest
0 голосов
/ 03 мая 2020

В моем SettingsFragment я хочу дать пользователю возможность выбора языка. Я создал строки. xml Файл поместил их в папку значений. Пользователи могут выбрать предпочтительный язык с помощью AlertDialog в SettingsFragment, и после выбора я сохранил выделение с помощью SharedPreferences и назвал его в классе приложения. В API 24 это работает хорошо, но в API 28 нет. Мои коды приведены ниже;

1 - switchLocal метод в Utils

 public static void switchLocal(Context context, String localCode, Activity activity) {
    if (localCode.equalsIgnoreCase(""))
        return;
    Resources resources = context.getResources();
    Locale locale = new Locale(localCode);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new
            android.content.res.Configuration();
    config.locale = locale;
    resources.updateConfiguration(config, resources.getDisplayMetrics());
    //restart base activity
    activity.finish();
    activity.startActivity(activity.getIntent());
}

2 - SettingsFrament

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_settings, container, false);

    layout_language = view.findViewById(R.id.layout_language);
    layout_language.setOnClickListener(this);

    SharedPreferences preferencesDil = requireActivity()
            .getSharedPreferences(Constants.DIL_SHARED_PREF, Context.MODE_PRIVATE);
    editorLanguage = preferencesDil.edit();

    return view;
}



@Override
public void onClick(View v) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    View view = requireActivity().getLayoutInflater().inflate(R.layout.set_language_layout, null);
    builder.setView(view);

    Button btn_english = view.findViewById(R.id.btn_english);
    Button btn_german = view.findViewById(R.id.btn_german);
    Button btn_french = view.findViewById(R.id.btn_french);

    btn_english.setOnClickListener(v14 -> {
        Utils.switchLocal(getActivity(), "en", getActivity());
        editorLanguage.putString(Constants.DIL_SHARED_PREF, "en");
    });
    btn_german.setOnClickListener(v13 -> {
        Utils.switchLocal(getActivity(), "de", getActivity());
        editorLanguage.putString(Constants.DIL_SHARED_PREF, "de");
    });
    btn_french.setOnClickListener(v1 -> {
        Utils.switchLocal(getActivity(), "fr", getActivity());
        editorLanguage.putString(Constants.DIL_SHARED_PREF, "fr");
    });

    builder.setPositiveButton(R.string.iptal, null);
    AlertDialog dialog = builder.create();
    dialog.show();

}

3 - Класс приложения

SharedPreferences preferencesDil = getSharedPreferences(Constants.DIL_SHARED_PREF, Context.MODE_PRIVATE);
    String language = preferencesDil.getString(Constants.DIL_SHARED_PREF, null);
    if (language != null) {
        Utils.switchLocal(getApplicationContext(), language, (Activity) getApplicationContext());
    }
...