I have two languages in android studio, I am done with changing languages.but the problem is when I rotate application automatically change to default language.how could i overcome this ,in my program I used recycler view as language menu and then click on recycler view I invoked a local listener interface and I override the set local method in the main activity.
In my main activity, I have an overrode setlocal() method perfectly working and but when rotates it goes to English. genius peoples get me the code for these.
public class LanguageActivity extends AppCompatActivity implements LocaleListener {
private List<Languages>languagesList=new ArrayList<>();
private RecyclerView recyclerView;
private LanguageAdapter languageAdapter;
private String langword="ar";
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
setLocale(langword);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
setLocale(langword);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_language);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 3);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
languageAdapter = new LanguageAdapter(languagesList);
recyclerView.setLayoutManager(mLayoutManager);
languageAdapter.setLocaleListener(this);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(languageAdapter);
prepareLanguageData();
}
private void prepareLanguageData() {
Languages languages = new Languages("English");
languagesList.add(languages);
languages = new Languages("العَرَبِيَّة");
languagesList.add(languages);
@Override
public void setLocale(String lang) {
langword= lang;
Locale[] locales = Locale.getAvailableLocales();
boolean is_supported=false;
for (int i = 0; i < locales.length; i++) {
if(lang.equals(locales[i].toString()))
{
is_supported=true;
break;
}
Log.e( "Languages",i+" :"+ locales[i]);
}
if(is_supported) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
conf.setLocale(myLocale);
} else {
conf.locale = myLocale;
}
res.updateConfiguration(conf, dm);
}
}
}