2014-02-07 84 views
0

我的應用程序需要支持多種語言。我想從應用程序的所有活動中更改應用程序語言。所以我使用Base_Activity並將微調器放置在操作欄中。問題是在這裏改變語言。當我觸發微調器中的某個項目來改變語言時,它不會改變。但是在觸發物品並轉到下一個活動之後,它在那裏被更改。我試圖在觸發每次觸發語言後刷新頁面。當選擇微調器中的語言項時,如何使用另一種語言刷新頁面。我的代碼看起來像這樣;刷新語言更改項目觸發時的活動

public class Base_Activity extends Activity { 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 

    final Spinner spinner = (Spinner) menu.getItem(0).getActionView() 
      .findViewById(R.id.spinner); 

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.languages, R.layout.spinner_row); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     // private String currentLanguage; 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      // currentLanguage = spinner.getSelectedItem().toString(); 

      Locale locale = null; 
      switch (arg2) { 
      case 0: 
       locale = new Locale("en_US"); 
       break; 
      case 1: 
       locale = new Locale("fi"); 
       break; 
      case 2: 
       locale = new Locale("fr"); 
       break; 
      case 3: 
       locale = new Locale("de"); 
       break; 
      case 4: 
       locale = new Locale("sk"); 

       break; 
      case 5: 
       locale = new Locale("pl"); 
       break; 

      default: 
       locale = new Locale("en_US"); 
       break; 
      } 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 

      startActivity(); 
     } 

     private void startActivity() { 
      overridePendingTransition(0, 0); 
      Log.i("DEBUG", "GATEWAY"); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Locale.setDefault(Locale.ENGLISH); 

     } 

    }); 
    return super.onCreateOptionsMenu(menu); 
} 

}

回答

0
Locale localeNew = new Locale(locale); 
Locale.setDefault(localeNew); 

Configuration configNew = new Configuration(); 
configNew.locale = localeNew; 

getBaseContext().getResources().updateConfiguration(configNew, null); 
+0

是在我的代碼的差異,你給我提供什麼。我認爲它可能與其工作相同。 – bShah