在我的android应用程序中,我有一个按钮,可以改变语言。
单击该按钮后,将重新创建该活动以应用语言更改。
我需要通过SnackBar向用户显示一条消息,即语言已更改。
到目前为止,我使用的是Toast,它工作得很好,但从Android11开始,不推荐使用自定义的Toast视图,而是推荐使用SnackBars。
但是,SnackBar不会持久存在,因此不会显示它,因为活动是立即重新创建的。
public void ClickLang(View view)
{
String lng = readLang();
String tx;String newlng;
ImageView language = findViewById(R.id.lang);
if (lng.equals("sk")) {
language.setImageResource(R.drawable.sk);
newlng = "en"; tx="English language";
}
else {
language.setImageResource(R.drawable.en);
newlng = "sk"; tx="Slovenský jazyk";
}
showMsgSnack(tx);
saveLang(newlng);
}
public void showMsgSnack(String msg) {
View parentLayout = findViewById(android.R.id.content);
Snackbar snackbar = Snackbar.make(parentLayout, msg, Snackbar.LENGTH_SHORT);
snackbar.show();
}
private void saveLang(String lng) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.edit().putString("hrad_lang", lng).apply();
super.recreate();
}如果我删除super.recreate();,SnackBar就会出现,但lang不会改变,所以我需要它。
有没有一个解决方案,如何在重新创建之前显示SnackBar?
发布于 2020-10-26 03:23:26
多亏了@Manuel Mato,onSaveInstanceState似乎可以工作了:
protected void onSaveInstanceState( @NonNull Bundle texto) {
super.onSaveInstanceState(texto);
String lng = readLang();
texto.putString("showlng", lng);
}在onCreate中:
@Override
protected void onCreate(Bundle texto) {
super.onCreate(texto);
if (texto != null){String tx;
String tt = texto.getString("showlng");
assert tt != null;
if (tt.equals("sk")) { tx = "Slovenský jazyk";} else { tx = "English language";}
showMsgSnack(tx);
}https://stackoverflow.com/questions/64525163
复制相似问题