title: android locale change in orientation change
body: <p>in my app i am having two activities one is rotatable to both sides and other is locked in landscape mode.</p>
  
  <p>Following is my manifest file details where the activities been added</p>
  
  <pre><code>&lt;activity
      android:name="com.hogaming.android.Activities.LoginActivity"
      android:configChanges="orientation|screenSize|keyboardHidden"&gt;
  &lt;/activity&gt;
  
  &lt;activity
      android:name="com.android.activities.MainActivity"
      android:configChanges="orientation|screenSize|keyboardHidden"&gt;
  &lt;/activity&gt;
  </code></pre>
  
  <p>in my login activity using a spinner i am changing the locale and updating entire edit texts and buttons text. 
  In a button click action i am updating the UI views and that time when i rotate the device, the English locale is set on views which are updated
  Here is my entire code</p>
  
  <pre><code>public class LoginActivity extends Activity 
  {
      Locale locale = null;
      Spinner langSpinner;
      private SharedPreferences langPrefs;
      String langSelected = "";
      int langPosition = 0;
  
      @Override
      public void onCreate(Bundle savedInstanceState) 
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.loginscreen);
  
          langPrefs = PreferenceManager.getDefaultSharedPreferences(this);
          langSelected = langPrefs.getString(langPrefKey, "");
          langPosition = langPrefs.getInt(langPosKey, 0);
  
          langSpinner = (Spinner)this.findViewById(R.id.lanuage_spinner1);
          langSpinner.setSelection(langPosition);
          langSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
          {
              @Override
              public void onItemSelected(AdapterView&lt;?&gt; arg0, View arg1, int pos, long arg3) 
              {   
                  if (pos == 0) 
                  {
                      langSelected ="en";
                      locale = Locale.ENGLISH;
                  }
                  else if (pos == 1) 
                  {
                      langSelected ="it";
                      locale = Locale.ITALIAN;
                  } 
                  else if (pos == 2) 
                  {
                      langSelected ="zh";
                      locale = Locale.SIMPLIFIED_CHINESE;
                  }               
                  else if (pos == 3)
                  {
                      langSelected ="zh-rTW";
                      locale = Locale.TRADITIONAL_CHINESE;
                  }
                  changeLang(langSelected, pos);
              }
              @Override
              public void onNothingSelected(AdapterView&lt;?&gt; arg0) {
                  // TODO Auto-generated method stub
  
              }   
          });
  
          btnLogin = (Button) this.findViewById(R.id.LoginButton);
          btnLogin.setOnClickListener(new ButtonClickListener());
      }
  
      @Override
      protected void onStart() {
          super.onStart();
      }
  
      @Override
      protected void onStop() {
          super.onStop();
          this.finish();
      }
  
      @Override
      protected void onDestroy() 
      {
          super.onDestroy();
          this.finish();
      }
  
      public class ButtonClickListener implements OnClickListener {
          public void onClick(View v) {
                      final LoginTask validateTask = new LoginTask(context, usernameField.getText().toString(), passwordField.getText().toString());
                      validateTask.execute();
                  }
  
                  // Hide the keyboard
                  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                  imm.hideSoftInputFromWindow(passwordField.getWindowToken(), 0);
      }
  
      public class LoginTask extends AsyncTask&lt;Void, Void, String&gt; 
      {
          protected LoginActivity context;
          protected Exception exception;
          private String username;
          private String password;
  
          public LoginTask(LoginActivity context, String uname, String pwd) {
              this.context = context;
              this.username = uname;
              this.password = pwd;
          }
  
          @Override
          protected String doInBackground(Void... params) {
              try 
              {
                  return HTTPHelper.LoginTaskData(this.context, username, password);
              }
              catch (Exception e) 
              {
                  exception = e;
                  Log.e(TAG, "Login Task Error", e);
              }
              return null;
          }
  
          @Override
          protected void onPostExecute(String result) 
          {
              super.onPostExecute(result);
              Log.e(TAG, "LoginTask: " + result);
              if (result.equals("true")) 
              {
                  // moves to next activity
              }
              else if (result.equals("false"))
              {
                  //showing an alert textview with selected language text
              }
          }
      }
  
      public void changeLang(String lang, int pos)
      {
          if (lang.length() != 0)
          {       
              saveLocale(lang, pos, locale);
              android.content.res.Configuration config = new android.content.res.Configuration();
              config.locale = locale;
              Locale.setDefault(locale);
              getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
              updateTexts();
          }
      }
  
      public void saveLocale(String lang, int pos, Locale locale)
      {
          SharedPreferences.Editor editor1 = langPrefs.edit();
          editor1.remove(langPrefKey);
          editor1.remove(langPosKey);
          editor1.commit();
  
          SharedPreferences.Editor editor = langPrefs.edit();
          editor.putString(langPrefKey, lang);
          editor.putInt(langPosKey, pos);
          editor.commit();
  
          langSelected = langPrefs.getString(langPrefKey, "");
          langPosition = langPrefs.getInt(langPosKey, 0);
      }
  
      private void updateTexts()
      {
          // here i will once again set all textview String values, it changes to the selected language
      }
  
      @Override
      public void onConfigurationChanged(android.content.res.Configuration newConfig) 
      {
          super.onConfigurationChanged(newConfig);
          if (locale != null){
              newConfig.locale = locale;
              Locale.setDefault(locale);
              getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
          }
      }
  }
  </code></pre>