Как сохранить последний выбранный язык, используя -предприятие? - PullRequest
0 голосов
/ 12 мая 2019

Я добавляю несколько языков в моем приложении для Android.Всякий раз, когда я меняю язык, он меняется хорошо.Но после повторного открытия приложения снова отображается экран выбора языка.Я хочу сохранить последний выбранный язык, поэтому в следующий раз, когда пользователь снова откроет приложение, оно не должно отображать экран выбора языка, оно должно сразу перейти на следующую страницу и отобразить элементы на языке, который был выбран последним.Что делать?Любые решения?Пожалуйста, проверьте код ниже.В этом коде, где я должен хранить в SharedPreferences и где я должен получить разделяемое предпочтение

public class lang extends AppCompatActivity {

    Spinner spinner;
    Locale myLocale;
    String currentLanguage = "en", currentLang;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lang);

        currentLanguage = getIntent().getStringExtra(currentLang);

        spinner = (Spinner) findViewById(R.id.spinner);

        List<String> list = new ArrayList<String>();

        list.add("Select language");
        list.add("English");
        list.add("Español");
        list.add("Français");
        list.add("Hindi");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                switch (position) {
                    case 0:
                        break;
                    case 1:
                        setLocale("en");
                        break;
                    case 2:
                        setLocale("es");
                        break;
                    case 3:
                        setLocale("fr");
                        break;
                    case 4:
                        setLocale("hi");
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
    }

    public void setLocale(String localeName) {
        if (!localeName.equals(currentLanguage)) {
            myLocale = new Locale(localeName);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
            Intent refresh = new Intent(this, MainActivity.class);
            refresh.putExtra(currentLang, localeName);
            startActivity(refresh);
        } else {
            Toast.makeText(lang.this, "Language already selected!", Toast.LENGTH_SHORT).show();
        }
    }



    public void onBackPressed() {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
        System.exit(0);
    }
}

1 Ответ

0 голосов
/ 13 мая 2019

вам нужно создать класс AppPreference и сохранить ваши данные в Shared Preference следующим образом: -

public class AppPrefrences {

            private static SharedPreferences mPrefs;
            private static SharedPreferences.Editor mPrefsEditor;


    public static String getSelectdLanguage(Context ctx) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            return mPrefs.getString("language", "");
        }

        public static void setSelectdLanguage(Context ctx, String value) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            mPrefsEditor = mPrefs.edit();
            mPrefsEditor.putString("language", value);
            mPrefsEditor.commit();
        }

public static void clearAllPreferences(Context ctx) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        mPrefsEditor = mPrefs.edit();
        mPrefsEditor.clear();
        mPrefsEditor.commit();
    }
        }

чтобы сохранить выбранный язык, вызовите этот метод: -

AppPreference.setSelectdLanguage(this, "selected language");

и получить ваш выбор из общего предпочтения: -

String selectdLanguage = AppPreference.getSelectedLanguage(this);
...