簡體   English   中英

Android SnackBar 在活動重新創建之前未顯示

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM