[英]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.