2017-09-11 72 views
0

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

回答

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

實例化一個新的意圖,你onBackPressed()

+0

當後按時,它不會轉到上一個活動。如何回憶onCreate()並返回?謝謝。 –

+0

檢查我編輯的答案。 – Orvenito

+0

java.lang.IllegalStateException:已連接 –

0

給resultCode爲當從當前活動回來,或保存設置,然後檢查活動的簡歷配置語言變化

0

您可以通過處理調用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);'後退時它不會進入上一個活動。重新加載當前活動 –

0

我認爲你應該完成前面的活動並重新創建它,你可以使用LocalBroadcast。

0

當使用重新創建方法做

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); 
} 
0

由於您在創建第一個活動到第二個活動的意圖時使用了兩個活動,因此將調用第一個活動onStop(),並將活動放回棧中。當您按回第一個活動時onCreate()不會再次調用,但onResume( )被調用並且活動恢復。

因此,您正試圖在onResume()中完成的邏輯,以便每次按下按鈕時都會調用它。有關更多參考,請檢查該選項。

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

相關問題