#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)); }
@DineshSarma3. вы используете жестко закодированные строки, то есть «EN» и «FR». Для изменения при изменении локали вам необходимо установить это значение из файла ресурсов.
4. TaraITEM(getString(R.string.en),R.drawable.steag_en); вот так
5. @DineshSarma Это только то, как он отображается в моем счетчике.