【发布时间】:2021-02-08 00:05:39
【问题描述】:
在我的 android 应用程序中,我有一个按钮,可以更改语言。
单击按钮后,将重新创建活动以应用语言更改。
我需要通过 SnackBar 向用户显示语言已更改的消息。
到目前为止,我使用了 Toast,它运行良好,但从 Android 11 开始,自定义 Toast 视图已被弃用,建议使用 SnackBar。
但是 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?
【问题讨论】:
-
我认为 onSaveInstanceState 可以帮你解决这个问题。
-
谢谢你,我试过了,似乎有效,我们希望这条消息只会出现在这种情况下。由于我在整个活动中只有一个重新创建,我认为它应该可以工作。我在答案中发布了我的代码。也许还有其他方法,例如创建一个计时器,并且只有在重新创建之后,所以消息不会消失,但现在我保留 onSaveInstanceState 解决方案