Android 更改语言后如何刷新活动?

Android 更改语言后如何刷新活动?,android,localization,Android,Localization,我在Google和stackoverflow上搜索,但我无法解决我的问题。我指的是我有三项活动(活动1、2、3)。活动1>活动2>活动3(弥尔顿变化)。在活动3中,我有两个单选按钮要更改(en,hi)。在我改变语言之后;进入第一个活动(活动1),一切正常。但我想在选择单选按钮(更改的语言)后保持当前活动(刷新当前活动)。否则,当我返回backpressed()时,如何调用onCreate()。如何在改变语言后保持当前活动的最佳方式 onCreate @Override protected voi

我在Google和stackoverflow上搜索,但我无法解决我的问题。我指的是我有三项活动(活动1、2、3)。活动1>活动2>活动3(弥尔顿变化)。在活动3中,我有两个单选按钮要更改(en,hi)。在我改变语言之后;进入第一个活动(活动1),一切正常。但我想在选择单选按钮(更改的语言)后保持当前活动(刷新当前活动)。否则,当我返回backpressed()时,如何调用onCreate()。如何在改变语言后保持当前活动的最佳方式

onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);

    txt = (MMTextView) findViewById(R.id.txt);
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

    pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
    editor = pref.edit();

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
            String lang = "en";
            switch (i) {
                case R.id.eng:
                    lang = "en";
                    Intent i1 = new Intent(Main3Activity.this, MainActivity.class);
                    i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i1);
                    finish();
                    break;
                case R.id.hi:
                    lang = "hi";
                    Intent i2 = new Intent(Main3Activity.this, MainActivity.class);
                    i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i2);
                    finish();
                    break;
                default:
                    break;
            }
            changeLocale(lang);
        }
    });

    loadLocale();
}
private void changeLocale(String lang) {
    if (lang.equalsIgnoreCase(""))
        return;
    Locale myLocale = new Locale(lang); 
    saveLocale(lang);  
    Locale.setDefault(myLocale);    
    Configuration config = new Configuration(); 
    config.locale = myLocale;   
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());  
}
private void saveLocale(String lang) {
    editor.putString("save", lang);
    editor.commit();
}

private void loadLocale() {
    String lang = pref.getString("save", "");
    changeLocale(lang);
}
changeLocale

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);

    txt = (MMTextView) findViewById(R.id.txt);
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

    pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
    editor = pref.edit();

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
            String lang = "en";
            switch (i) {
                case R.id.eng:
                    lang = "en";
                    Intent i1 = new Intent(Main3Activity.this, MainActivity.class);
                    i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i1);
                    finish();
                    break;
                case R.id.hi:
                    lang = "hi";
                    Intent i2 = new Intent(Main3Activity.this, MainActivity.class);
                    i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i2);
                    finish();
                    break;
                default:
                    break;
            }
            changeLocale(lang);
        }
    });

    loadLocale();
}
private void changeLocale(String lang) {
    if (lang.equalsIgnoreCase(""))
        return;
    Locale myLocale = new Locale(lang); 
    saveLocale(lang);  
    Locale.setDefault(myLocale);    
    Configuration config = new Configuration(); 
    config.locale = myLocale;   
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());  
}
private void saveLocale(String lang) {
    editor.putString("save", lang);
    editor.commit();
}

private void loadLocale() {
    String lang = pref.getString("save", "");
    changeLocale(lang);
}
saveLocale和loadLocale

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);

    txt = (MMTextView) findViewById(R.id.txt);
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

    pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
    editor = pref.edit();

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
            String lang = "en";
            switch (i) {
                case R.id.eng:
                    lang = "en";
                    Intent i1 = new Intent(Main3Activity.this, MainActivity.class);
                    i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i1);
                    finish();
                    break;
                case R.id.hi:
                    lang = "hi";
                    Intent i2 = new Intent(Main3Activity.this, MainActivity.class);
                    i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(i2);
                    finish();
                    break;
                default:
                    break;
            }
            changeLocale(lang);
        }
    });

    loadLocale();
}
private void changeLocale(String lang) {
    if (lang.equalsIgnoreCase(""))
        return;
    Locale myLocale = new Locale(lang); 
    saveLocale(lang);  
    Locale.setDefault(myLocale);    
    Configuration config = new Configuration(); 
    config.locale = myLocale;   
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());  
}
private void saveLocale(String lang) {
    editor.putString("save", lang);
    editor.commit();
}

private void loadLocale() {
    String lang = pref.getString("save", "");
    changeLocale(lang);
}

您可以关闭和打开相同的活动,如下所示:

startActivity(new Intent(ActivityName.this, ActivityName.class));
finish();

我希望这能起作用。

使用
重新创建()
重新启动当前活动。

当用户选择不同的语言时,调用下面的函数

/***You need to create separate String file for both arabic and 
English***/

English
Values
String.xml
Hindi   
Values-hi
String.xml

/**You can change the application language using the following code:**/

language =  "en"; or  language =  "hi";

@Override
public void recreate()
{
if (android.os.Build.VERSION.SDK_INT >= 14)
{
    super.recreate();
}
else
{
    startActivity(getIntent());
    finish();
}
}

private void updateLanguage(String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",language);
editor.apply();

recreate();
}
 public void setApplicationLanguage(String language) {
    Locale myLocale = new Locale(language);
    Resources res = getBaseContext().getResources();
    DisplayMetrics display = res.getDisplayMetrics();
    Configuration configuration = res.getConfiguration();
    configuration.locale = myLocale;
    res.updateConfiguration(configuration, display);
    Intent refresh = new Intent(getBaseContext(), ChooserActivity.class);
    getBaseContext().startActivity(refresh);
}

此链接可能会帮助您:@Shwe请查看此链接--->