Адаптер ListView не меняет язык при изменении локали

#android

#Android

Вопрос:

Итак, я создаю приложение на 2 языках. Изменение locale работает хорошо для всех activity , кроме одного. Здесь у меня есть ListView объект, который создается adapter динамически в соответствии с JSON ответом сервера. Я использую spinner расположенное на navigation для переключения языка следующим образом:

 final Spinner spinner = (Spinner) navigationView.getMenu().findItem(R.id.navigation_drawer_item3).getActionView();
    SpinnerAdapterTara adapter = new SpinnerAdapterTara(this, mCountryList);
    spinner.setAdapter(adapter);
    spinner.setSelection(pozitie_limba);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            TaraITEM clickedItem = (TaraITEM) parent.getItemAtPosition(position);
            String clickedCountryName = clickedItem.getCountryName();
            pozitie = parent.getSelectedItemPosition();

            if (!clickedCountryName.equals(lastCountryName)) {
                lastCountryName = clickedCountryName;
                switch (clickedCountryName) {
                    case "FR": {
                        SharedPreferences.Editor editor = getSharedPreferences("SetareLimba", MODE_PRIVATE).edit();
                        editor.putString("LimbaMea", "fr");
                        editor.putInt("Pozitie", pozitie);
                        editor.apply();
                        setAppLocale("fr");
                        Intent intent = new Intent(getApplicationContext(), Profil.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                        spinner.setSelection(position);
                        break;
                    }
         
                    case "EN": {
                        setAppLocale("en");
                        SharedPreferences.Editor editor = getSharedPreferences("SetareLimba", MODE_PRIVATE).edit();
                        editor.putString("LimbaMea", "en");
                        editor.putInt("Pozitie", pozitie);
                        editor.apply();
                        Intent intent = new Intent(getApplicationContext(), Profil.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                        spinner.setSelection(position);
                        break;
                    }
                }

            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
  

Когда я меняю язык, все strings переключаются в соответствии с файлами строк en / fr, но поскольку я использую refresh by intent , list он воссоздается, но с тем же default языком, en . Поэтому, если я переключусь на fr , я получу весь экран с французскими строками, но list с английскими строками. Любая помощь будет оценена, спасибо!

Комментарии:

1. можете ли вы показать код инициализации mCountryList

2. private ArrayList<TaraITEM> mCountryList; public void initList() { mCountryList = new ArrayList<TaraITEM>(); mCountryList.add(new TaraITEM("EN", R.drawable.steag_en)); mCountryList.add(new TaraITEM("FR", R.drawable.steag_fr)); } @DineshSarma

3. вы используете жестко закодированные строки, то есть «EN» и «FR». Для изменения при изменении локали вам необходимо установить это значение из файла ресурсов.

4. TaraITEM(getString(R.string.en),R.drawable.steag_en); вот так

5. @DineshSarma Это только то, как он отображается в моем счетчике.