[英]Android SnackBar not shown before Activity recreate
在我的 android 应用程序中,我有一个按钮,可以更改语言。
单击按钮后,将重新创建活动以应用语言更改。
我需要通过 SnackBar 向用户显示一条消息,表明语言已更改。
直到现在我使用了 Toast 并且工作正常,但是从 Android 11 开始,自定义 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 出现了,但语言没有改变,所以我需要它。
有没有解决方案,如何在重新创建之前显示 SnackBar?
感谢@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);
}
最好使用 restore state 方法并对之前的答案给予正面评价,谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.