如何在onBackPressed()时回顾onCreate()并转到之前的活动?

问题描述:

MyApp测试是多语言变化。 http://www.androhub.com/android-building-multi-language-supported-app/选择单选按钮后,它会更改当前活动中的语言。但是当我回到以前的活动时,它不会改变语言。所以,当我点击返回按钮时,我想回想一下创建。或者如何刷新当前活动?如何在onBackPressed()时回顾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); 
    } 
} 
+0

我觉得不记得在后面的按钮按下创建。使用onResume来完成你的逻辑。例如,如果您正在提取文本并将其设置为EditText上的提示,那么在返回返回按钮后,按照您的需要再次设置提示文本。 – Abhishek

+0

之前的活动已经在任务堆栈中(已经在内存中)。一旦在当前活动中更改了语言并按回按钮,它将导航到堆栈中的上一个活动。它不会重新加载之前的活动,它只会使以前的活动可见。所以我认为改变MainActivity中的语言或启动器活动总是更好。 – Yatish

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

实例化一个新的意图,你onBackPressed()

+0

当后按时,它不会转到上一个活动。如何回忆onCreate()并返回?谢谢。 –

+0

检查我编辑的答案。 – Orvenito

+0

java.lang.IllegalStateException:已连接 –

给resultCode为当从当前活动回来,或保存设置,然后检查活动的简历配置语言变化

您可以通过处理调用onCreate方法上背衬回新闻事件。

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

如果您使用的是API 11,那么使用下面的代码,并且如果上面的代码不起作用。

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

java.lang.IllegalStateException:已连接 –

+0

让我知道它是否无效。 –

+0

minSdkVersion 15,'Intent intent = getIntent(); finish(); startActivity(intent);'后退时它不会进入上一个活动。重新加载当前活动 –

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

当使用重新创建方法做

this.recreate() 

只是在API级别11中添加如果您要添加更多的设备可以检查API级别,并同时实现重新创建方法以及工作

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

您可以通过一个if语句喜欢同时使用......

if (android.os.Build.VERSION.SDK_INT >= 11){ 
//Code for recreate 
recreate(); 

}else{ 
//Code for Intent 
Intent intent = getIntent(); 
finish(); 
startActivity(intent); 
} 

由于您在创建第一个活动到第二个活动的意图时使用了两个活动,因此将调用第一个活动onStop(),并将活动放回栈中。当您按回第一个活动时onCreate()不会再次调用,但onResume( )被调用并且活动恢复。

因此,您正试图在onResume()中完成的逻辑,以便每次按下按钮时都会调用它。有关更多参考,请检查该选项。

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