Android не меняет язык строковых ресурсов во фрагментеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Android не меняет язык строковых ресурсов во фрагменте

Сообщение Anonymous »

У меня есть приложение со строковыми ресурсами для немецкого и английского языков. Я определил отдельный фрагмент для изменения языка, который вы можете увидеть здесь

Код: Выделить всё

public class FR_Options extends Fragment implements View.OnClickListener {

/*
String specifying the language of the App
*/

public static final String LANGUAGE_GERMAN = "German";
public static final String LANGUAGE_ENGLISH = "English";
//Set the default language to GERMAN
public static String currentLanguageOfTheApp = LANGUAGE_ENGLISH;

public FR_Options() {
// Required empty public constructor
}

public static FR_Options newInstance(String param1, String param2) {
FR_Options fragment = new FR_Options();

return fragment;
}

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

private FragmentOptionsBinding binding;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
binding = FragmentOptionsBinding.inflate(inflater, container, false);
return binding.getRoot();
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.imageButtonGermany.setOnClickListener(this);
binding.imageButtonUK.setOnClickListener(this);
if(currentLanguageOfTheApp.equals(LANGUAGE_ENGLISH)) {
binding.textViewCurrentLanguageValue.setText(LANGUAGE_ENGLISH);
binding.imageButtonGermany.setAlpha(0.5f);
binding.imageButtonUK.setAlpha(1.0f);
}
if(currentLanguageOfTheApp.equals(LANGUAGE_GERMAN)) {
binding.textViewCurrentLanguageValue.setText(LANGUAGE_GERMAN);
binding.imageButtonGermany.setAlpha(1.0f);
binding.imageButtonUK.setAlpha(0.5f);
}

}

public void onDestroyView() {
super.onDestroyView();
binding = null;
}

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onClick(View view) {

if(view.getId() == R.id.imageButtonGermany) {

/*
Set the language to "German" for other fragments and database queries
*/

this.currentLanguageOfTheApp = LANGUAGE_GERMAN;

/*
Set the language to "German" for the XML-layout files
*/

Locale locale;
locale = new Locale("de", "DE");

Configuration config = new Configuration(getActivity().getBaseContext().getResources().getConfiguration());
Locale.setDefault(locale);
config.setLocale(locale);
getActivity().recreate();

getActivity().getBaseContext().getResources().updateConfiguration(config,
getActivity().getBaseContext().getResources().getDisplayMetrics());

}

if(view.getId() == R.id.imageButtonUK) {

/*
Set the language to "English" for other fragments and database queries
*/

this.currentLanguageOfTheApp = LANGUAGE_ENGLISH;

/*
Set the language to "English"  for the XML-layout files
*/

Locale locale;
locale = new Locale("en", "EN");

Configuration config = new Configuration(getActivity().getBaseContext().getResources().getConfiguration());
Locale.setDefault(locale);
config.setLocale(locale);
getActivity().recreate();

getActivity().getBaseContext().getResources().updateConfiguration(config,
getActivity().getBaseContext().getResources().getDisplayMetrics());

}

}

}
Теперь, когда я перехожу к тестовому фрагменту, файл Java которого выглядит следующим образом

Код: Выделить всё

public class Test extends Fragment  {

int widthDisplay;
int heightDisplay;

private FragmentTestBinding binding;

private ConstraintLayout constraintLayout;
ConstraintSet constraintSet ;

private boolean fragmentViewHasBeenCreated = false;

int helpUpdateCounterProgressBar = 0;//Just for testing

boolean animationIsWindBladRotating = false;

private boolean sunIsShiningForImagewViews = false;

private boolean helpSolarGameRectangleCorrectlyCaughtPreviously = false;

public Test() {
// Required empty public constructor
}

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentTestBinding.inflate(inflater, container, false);

WindowManager wm = (WindowManager) getActivity().getWindowManager();
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
widthDisplay = size.x;
heightDisplay = size.y;

//Test to set the string resources programmatically
String goalText = getString(R.string.goal);
String timeText = getString(R.string.time);
binding.textViewGoal.setText(goalText);
binding.textView3.setText(timeText);

container.getContext();
constraintLayout= binding.constraintLayout;

fragmentViewHasBeenCreated = true;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
constraintLayout = binding.constraintLayout;
constraintSet = new ConstraintSet();
return binding.getRoot();

}//end onCreateView

@Override
public void onDestroyView() {
super.onDestroyView();

// Reset your variable to false
fragmentViewHasBeenCreated = false;

}
}
с соответствующим XML-файлом макета Языки строковых ресурсов android:text="@string/time" и android:text="@string/goal" никогда не меняются и всегда оставаться английским, который является языком по умолчанию.
В папкеvalues/string/strings.xml есть две записи

Код: Выделить всё

"    Goal
Time"
а в папке значений/string/strings.mxl (de-rDE) есть две записи "

Код: Выделить всё

    Ziel
Zeit"
по-прежнему язык в классе Test не меняется, что бы я ни делал в классе фрагмента FR_Options.
Обновить >: Я обнаружил, что при смене языка в классе FR_Options я возвращаюсь к своему классу FR_Menu, который выглядит следующим образом

Код: Выделить всё

public class FR_Menu extends Fragment implements View.OnClickListener{

private FragmentMenuBinding binding;

public FR_Menu() {

}

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentMenuBinding.inflate(inflater, container, false);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

binding.buttonGame.setOnClickListener(this);
binding.buttonOptions.setOnClickListener(this);
binding.buttonHighscores.setOnClickListener(this);
binding.buttonFacts.setOnClickListener(this);
binding.buttonExit.setOnClickListener(this);
binding.buttonTest.setOnClickListener(this);

Log.e("LogTag_Menu", "Method onCreateView - this: " + this);
return binding.getRoot();
}

@Override
public void onClick(View view) {

if(view.getId() == R.id.button_game) {
Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToFRGame());
}

if(view.getId() == R.id.button_highscores) {
Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToFRHighScores());
}

if(view.getId() == R.id.button_facts) {
//Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToFRInterestingFacts());
Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToFRRVLevelSelectionMenu());
}

if(view.getId() == R.id.button_options) {
Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToFROptions());
}

if(view.getId() == R.id.button_test) {
Navigation.findNavController(getView()).navigate(FR_MenuDirections.actionFRMenuToTest());
}

if(view.getId() == R.id.button_exit) {
getActivity().finishAndRemoveTask();
}

}
}
правильно изменен язык строковых ресурсов. Однако при переходе из класса FR_Menu в другой класс язык строковых ресурсов снова меняется на язык по умолчанию (английский). Почему это происходит?
Напоминание. Есть ли у кого-нибудь идеи, почему это происходит и как решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/783 ... a-fragment
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android не меняет язык строковых ресурсов во фрагменте
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Вопрос о стиле кодирования для строковых ресурсов Android.
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Android Jetpack Compose: как отображать стилизованный текст из строковых ресурсов
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Android Jetpack Compose: как отображать стилизованный текст из строковых ресурсов
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Цифры отображаются как имена вкладок в NavigationSuiteScaffoldLayout вместо строковых ресурсов.
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»