【发布时间】:2020-01-22 07:10:28
【问题描述】:
我正在尝试使用位于toolbar 中的spinner 来实现语言更改。现在我有spinner的以下代码:
initList();
Spinner spinnerCountries = findViewById(R.id.spinner_limba);
mAdapter = new SpinnerAdapterTara(Harta.this, mCountryList);
spinnerCountries.setAdapter(mAdapter);
spinnerCountries.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();
if (clickedCountryName.equals("FR")){
setLocale("fr");
recreate();
} else if (clickedCountryName.equals("EN")){
setLocale("en");
recreate();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
initList(); 创建语言列表。这里的问题是关于onItemSelected,因为如果我选择fr 或en,setLocale("fr")/setLocale("en"); recreate(); 将持续运行,冻结我的应用程序。我需要一个解决方案来实现一次onItemSelected,比如onChangeListener 或其他东西。当 spinner 值更改时,应用程序应更改其语言。
编辑:我添加了setLocale():
private void setLocale(String limba){
Locale locale = new Locale(limba);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale= locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor = getSharedPreferences("Setare limba", MODE_PRIVATE).edit();
editor.putString("Limba mea", limba);
editor.apply();
}
编辑:添加initList()
private void initList() {
mCountryList = new ArrayList<>();
mCountryList.add(new TaraITEM("RO", R.drawable.steag_ro));
mCountryList.add(new TaraITEM("EN", R.drawable.steag_en));
mCountryList.add(new TaraITEM("FR", R.drawable.steag_fr));
}
【问题讨论】:
-
你可以看看这个答案。 stackoverflow.com/a/13398044/4957929
-
那个答案/问题对我的情况没有帮助
-
设置一次后什么时候可以重置?
-
你能添加你的
initList()实现吗?
标签: android