如何在onBackPressed()时调用onCreate()并转到上一个活动?

时间:2017-09-11 03:40:56

标签: android localization

MyApp测试是多语言更改。 http://www.androhub.com/android-building-multi-language-supported-app/选择单选按钮后,它会更改当前活动中的语言。但是当我回到之前的活动时,它并没有改变语言。所以,当我点击后退按钮时,我想回忆一下onCreate。或者如何刷新当前活动?

onCreate()

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

    txt = (TextView) findViewById(R.id.txt);
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
    radioEng = (RadioButton) findViewById(R.id.eng);
    radiohi = (RadioButton) findViewById(R.id.hi);

    // Initialization
    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"; // Default Language
            switch (i) {
                case R.id.eng:
                    lang = "en";
                    break;
                case R.id.hi:
                    lang = "hi";
                    break;
                default:
                    break;
            }
            changeLocale(lang); // Change Locale on selection basis
        }
    });

    loadLocale();
}

changeLocale

private void changeLocale(String lang) {
    if (lang.equalsIgnoreCase(""))
        return;
    Locale myLocale = new Locale(lang); // Set Selected Locale
    saveLocale(lang);   // Save the selected locale
    Locale.setDefault(myLocale);    // set new locale as default
    Configuration config = new Configuration(); // get Configuration
    config.locale = myLocale;   // set config locale as selected locale
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());   // Update the config
}

saveLocale& loadLocale

private void saveLocale(String lang) {
    editor.putString("save", lang);
    editor.commit();
    if (lang.equals("en")) {
        radioEng.setChecked(true);
    } else {
        radiohi.setChecked(true);
    }
}

private void loadLocale() {
    String lang = pref.getString("save", "");
    if (lang.equals("")) {
        radioEng.setChecked(true);
    } else {
        changeLocale(lang);
    }
}

6 个答案:

答案 0 :(得分:0)

Intent intent=new Intent(Current_Activity.this,Current_Activity.class);
    startActivity(intent);
    finish();

onBackPressed()

中实例化新意图

答案 1 :(得分:0)

从当前活动返回时给出resultCode,或保存配置,然后检查活动恢复上的配置以进行语言更改

答案 2 :(得分:0)

您可以通过处理背压事件来调用onCreate方法。

@Override
    public void onBackPressed() {
        onCreate(new Bundle()); 
    }

如果您使用的是API 11,请使用以下代码,如果上述代码不起作用。

Intent intent = getIntent();
finish();
startActivity(intent);

答案 3 :(得分:0)

我认为你应该完成之前的活动并重新创建它,你可以使用LocalBroadcast。

答案 4 :(得分:0)

使用重新创建方法时可以使用

ProviderOptions.Add("CompilerVersion", "v2.0");

它仅在API级别11中添加。如果要包含更多设备,可以检查API级别并实现重新创建方法以及

git pull

你可以通过制作像...这样的if语句来使用它们。

this.recreate()

答案 5 :(得分:0)

由于在从第一个活动到第二个活动创建意图时使用两个活动,因此调用第一个活动onStop()并将活动放回到堆栈。当您按下后退按钮时,第一个活动onCreate()不再被调用但是调用onResume()并恢复活动。

因此,您尝试的逻辑应该在onResume()中完成,以便每次按下后退按钮时都会调用它。有关更多参考,请检查此内容。

https://developer.android.com/guide/components/activities/activity-lifecycle.html