Android 如何使用SharedReference保存上次选择的语言?

Android 如何使用SharedReference保存上次选择的语言?,android,sharedpreferences,multilingual,Android,Sharedpreferences,Multilingual,我正在我的android应用程序中添加多语言功能。每当我改变语言,它就会改变得很好。但在重新打开应用程序后,它会再次显示“选择语言”屏幕。我想保存上次选择的语言,因此下次用户重新打开应用程序时,不应显示“选择语言”屏幕,它应直接转到下一页,并应以上次选择的语言显示项目。 怎么办?有什么解决办法吗?请检查下面的代码。在这段代码中,我必须存储在SharedReference中,并且我必须在哪里获取SharedReference public class lang extends AppCompatA

我正在我的android应用程序中添加多语言功能。每当我改变语言,它就会改变得很好。但在重新打开应用程序后,它会再次显示“选择语言”屏幕。我想保存上次选择的语言,因此下次用户重新打开应用程序时,不应显示“选择语言”屏幕,它应直接转到下一页,并应以上次选择的语言显示项目。 怎么办?有什么解决办法吗?请检查下面的代码。在这段代码中,我必须存储在SharedReference中,并且我必须在哪里获取SharedReference

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);
    }
}
public类lang扩展了AppCompative活动{
纺纱机;
本地语言;
字符串currentLanguage=“en”,currentLang;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lang);
currentLanguage=getIntent().getStringExtra(currentLang);
微调器=(微调器)findViewById(R.id.spinner);
列表=新的ArrayList();
列表。添加(“选择语言”);
列表。添加(“英文”);
添加(“Español”);
列表。添加(“Français”);
添加(“印地语”);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u微调器项目,列表);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共位置(适配器视图适配器视图视图视图视图内部位置长l){
开关(位置){
案例0:
打破
案例1:
设置语言环境(“en”);
打破
案例2:
setLocale(“es”);
打破
案例3:
setLocale(“fr”);
打破
案例4:
setLocale(“hi”);
打破
}
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
}
公共void setLocale(字符串localeName){
如果(!localeName.equals(currentLanguage)){
myLocale=新的区域设置(localeName);
Resources res=getResources();
DisplayMetrics dm=res.getDisplayMetrics();
Configuration=res.getConfiguration();
conf.locale=myLocale;
res.updateConfiguration(conf,dm);
意图刷新=新意图(此,MainActivity.class);
refresh.putExtra(currentLang,localeName);
星触觉(刷新);
}否则{
Toast.makeText(lang.this,“语言已选定!”,Toast.LENGTH_SHORT.show();
}
}
public void onBackPressed(){
意向意向=新意向(意向.行动\主要);
intent.addCategory(intent.CATEGORY_HOME);
intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
完成();
系统出口(0);
}
}

您必须创建一个AppPreference类,并将数据保存在共享首选项中,如下所示:-

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

最好在调用/启动此“lang”活动之前添加复选框,我在其中添加SharedReference您可以在setLocale()函数中添加复选框如果您不介意,请为我编写我将非常感谢fullAppPreference.setSelectdLanguage(此“选定语言”)。字符串selectdLanguage=AppPreference.getSelectedLanguage(此);我把这两个lin放在哪里?当您选择一种语言并获取所选语言时,请将语言设置为选中