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