Reputation: 117
In my application I am trying change language by clicking buttons (English/Italian). I choose default locale English. When opens activity and I press Italian button it changed but after that I couldn't choose English. In other word language changed only one time. What I did wrong?
public class MainActivity extends DefaultActivity implements View.OnClickListener {
String LOCALE_ITALIAN = "it";
String LOCALE_ENGLISH = "en";
Locale mLocale;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocale = new Locale(LOCALE_ENGLISH);
Locale.setDefault(mLocale);
Configuration config = new Configuration();
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.main);
findButton(R.id.english).setOnClickListener(this);
findButton(R.id.italian).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.english:
mLocale = new Locale(LOCALE_ENGLISH);
Locale.setDefault(mLocale);
Configuration config = new Configuration();
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
MainActivity.this.setContentView(R.layout.main);
break;
case R.id.italian:
mLocale = new Locale(LOCALE_ITALIAN);
Locale.setDefault(mLocale);
Configuration config1 = new Configuration();
config1.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config1,
getBaseContext().getResources().getDisplayMetrics());
MainActivity.this.setContentView(R.layout.main);
break;
}
}
}
Upvotes: 1
Views: 194
Reputation: 5896
I run your code and found solution. When you update your view by calling setContentView you have to call again buttons onclick. I'm sure it will work.
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.english:
mLocale = new Locale(LOCALE_ENGLISH);
Locale.setDefault(mLocale);
Configuration config = new Configuration();
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
NonOrangeUserActivity.this.setContentView(R.layout.non_orange_user);
findButton(R.id.english).setOnClickListener(this);
findButton(R.id.italian).setOnClickListener(this);
break;
case R.id.italian:
mLocale = new Locale(LOCALE_ITALIAN);
Locale.setDefault(mLocale);
Configuration config1 = new Configuration();
config1.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config1,
getBaseContext().getResources().getDisplayMetrics());
NonOrangeUserActivity.this.setContentView(R.layout.non_orange_user);
findButton(R.id.english).setOnClickListener(this);
findButton(R.id.italian).setOnClickListener(this);
break;
}
}
Upvotes: 3