繁体   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