listView(Android)中的项目语言未更改

问题描述 投票:2回答:2

我有一个使用2种语言的应用。当我按下按钮更改语言时,它会更改菜单和导航抽屉中的字符串,但不会更改listView中的项目。这是我的代码。

 private void showChangelanguageDialog() {
    //array of languages to display
    final String [] languages = {"English","Shona"};
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle(getString(R.string.choose_language));
    builder.setSingleChoiceItems(languages, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (which == 0){
                //english
                setLocale("en");
                recreate();
            }
            if (which == 1){
                //shona
                setLocale("sn");
                recreate();
            }
            //dismiss alert dialog when language is selected
            dialog.dismiss();
        }
    });
    AlertDialog alertDialog = builder.create();
    alertDialog.show();
}

private void setLocale(String lang) {
    Locale locale = new Locale(lang);
    Locale.setDefault(locale);
    Configuration configuration = new Configuration();
    configuration.locale=locale;
    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
    //save data to shared preferences
    SharedPreferences.Editor editor = getSharedPreferences("Settings", MODE_PRIVATE).edit();
    editor.putString("My_Lang",lang);
    editor.apply();
}

//load saved lanuage in saved preferences
public void loadLocale(){
    SharedPreferences prefs = getSharedPreferences("Settings",Activity.MODE_PRIVATE);
    String language = prefs.getString("My_Lang","");
    setLocale(language);
}

可能是什么问题?

java android xml
2个回答
1
投票

您可能需要在列表上调用notifyDataSetChanged()以强制其刷新其中的视图


0
投票

针对您的问题的简单解决方案应该是按here所示重新启动活动

© www.soinside.com 2019 - 2024. All rights reserved.