how to fix a multiple language application from changing language automatically when orientation changes?

179 views Asked by At

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

There are 0 answers