如何解决重新创建Activity前未显示Android SnackBar
在我的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,但是lang并没有改变,所以我需要它。
有解决方案,如何在重新创建之前显示SnackBar?
解决方法
由于@Manuel Mato,onSaveInstanceState似乎可以正常工作:
*D
和onCreate中:
protected void onSaveInstanceState( @NonNull Bundle texto) {
super.onSaveInstanceState(texto);
String lng = readLang();
texto.putString("showlng",lng);
}
,
最好使用恢复状态方法并对上一个答案给出肯定的评价,谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。