需要保存和检索数据时,应用程序关闭和重新打开共享偏好



我需要保存和检索数据时,应用程序关闭并重新打开与SharedPreferences。基本上,当我关闭应用程序的语言偏好不保存。我想知道:

  • 我应该实现OnPause方法,还是
  • 我应该在主活动上创建SharedPreferences方法吗?

这是我的changellanguage Activity

public class CambiaLinguaActivity extends AppCompatActivity {
TextView tvSelect;
RadioButton radioEnglish, radioFrench, radioItalian;
RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadLocale();
setContentView(R.layout.activity_cambia_lingua);
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setTitle(R.string.cambia_lingua);
//Assign variable
tvSelect = findViewById(R.id.tvSelect);
radioEnglish = findViewById(R.id.English);
radioFrench = findViewById(R.id.French);
radioItalian = findViewById(R.id.Italiano);
radioGroup = findViewById(R.id.rg_language);
radioItalian.setChecked(Update("ItalianIsChk"));
radioEnglish.setChecked(Update("EnglishIsChk"));
radioFrench.setChecked(Update("FrenchIsChk"));
//Set listener on radio group
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.Italiano:
setLocale("it");
Toast.makeText(CambiaLinguaActivity.this, "Italian", Toast.LENGTH_SHORT).show();
break;
case R.id.English:
setLocale("en");
Toast.makeText(CambiaLinguaActivity.this, "English", Toast.LENGTH_SHORT).show();
break;
case R.id.French:
setLocale("fr");
Toast.makeText(CambiaLinguaActivity.this, "French", Toast.LENGTH_SHORT).show();
break;
}
}
});
radioItalian.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean a) {
SaveIntoSP("ItalianIsChk",a);
}
});
radioEnglish.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
SaveIntoSP("EnglishIsChk",b);
}
});
radioFrench.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean c) {
SaveIntoSP("FrenchIsChk",c);
}
});
}

private void setLocale(String language) {
//initialize locale
Locale locale = new Locale(language);
Locale.setDefault(locale);
//initialize conf
Configuration configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());
//save data to shared preference
SharedPreferences.Editor editor = getSharedPreferences("Settings",MODE_PRIVATE).edit();
editor.putString("My_Lang", language);
editor.apply();
}
public void loadLocale(){
SharedPreferences preferences = getSharedPreferences("Settings", Activity.MODE_PRIVATE);
String language = preferences.getString("My_Lang","");
setLocale(language);
}
private void SaveIntoSP(String key, boolean value){
SharedPreferences radioBtnPref = getSharedPreferences("RadioBtnChk", MODE_PRIVATE);
SharedPreferences.Editor editor = radioBtnPref.edit();
editor.putBoolean(key, value);
editor.apply();
}
private boolean Update(String key) {
SharedPreferences radioBtnPref = getSharedPreferences("RadioBtnChk",MODE_PRIVATE);
return radioBtnPref.getBoolean(key,false);
}

*创建一个扩展应用程序类的新类

public LangChange  extends AppCompatActivity {
@Override
public void onCreate() {
super.onCreate();

// your code to change langauage
}

*扩展您的所有活动与LangChange类

你不需要在manifest name属性

中指定这个

相关内容

最新更新