Java 更改片段后如何取消显示堆叠的toast?

Java 更改片段后如何取消显示堆叠的toast?,java,android,toast,Java,Android,Toast,我想在用户转到另一个片段后,移除堆叠的Android祝酒词。我有堆叠的片段,在每个片段中,我有两个按钮触发不同的Toast消息。当一个片段的操作完成,用户导航到另一个片段或按下后退按钮时,祝酒会一直显示。这主要发生在用户快速点击按钮并强制祝酒堆叠时 或者,当我实例化全局Toast对象并调用cancel()时,无论用户点击按钮多少次,这两个Toast都会停止在片段的生命周期中显示 toast1 = new Toast(getContext()); toast2 = new Toast(getCon

我想在用户转到另一个片段后,移除堆叠的Android祝酒词。我有堆叠的片段,在每个片段中,我有两个按钮触发不同的Toast消息。当一个片段的操作完成,用户导航到另一个片段或按下后退按钮时,祝酒会一直显示。这主要发生在用户快速点击按钮并强制祝酒堆叠时

或者,当我实例化全局Toast对象并调用cancel()时,无论用户点击按钮多少次,这两个Toast都会停止在片段的生命周期中显示

toast1 = new Toast(getContext());
toast2 = new Toast(getContext());
showFirstToast(toast1).show();
showSecondToast(toast2).show();

private Toast showFirstToast(Toast toast){
    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.toast_layout_correct, (ViewGroup) 
                                   getActivity().findViewById(R.id.toast_layout));
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    return toast;
}

不要使用全局
Toast
对象,而是应该使用
Toast
的多个实例。所以,你可以一个一个地取消它

toast1 = new Toast(getContext());
toast2 = new Toast(getContext());
showFirstToast(toast).show();
showSecondToast(toast).show();

toast1.cancel()


不要使用全局
Toast
对象,而是应该使用
Toast
的多个实例。所以,你可以一个一个地取消它

toast1 = new Toast(getContext());
toast2 = new Toast(getContext());
showFirstToast(toast).show();
showSecondToast(toast).show();

toast1.cancel()


为了避免堆积的烤面包,我重复使用一个烤面包

Toast toast;

protected void showToast(final String text) {
    if (toast == null)
        toast = Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT);
    else
        toast.setText(text); // smoother transition than cancel + new toast
    toast.show();
}

@Override
public void onPause() {
    if(toast != null)
        toast.cancel();
    super.onPause();
}

为了避免堆积的烤面包,我重复使用一个烤面包

Toast toast;

protected void showToast(final String text) {
    if (toast == null)
        toast = Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT);
    else
        toast.setText(text); // smoother transition than cancel + new toast
    toast.show();
}

@Override
public void onPause() {
    if(toast != null)
        toast.cancel();
    super.onPause();
}

我也试过了,但问题依然存在。为了更好地理解,我编辑了这个问题。我也尝试过,但问题仍然存在。为了更好地理解,我对问题进行了编辑。祝酒词用于系统/关键类型的消息,因此在正确使用时,您不会希望它们在其他地方导航时消失。另一种方法是使用SnackBar,当你离开时它会消失。这可能是因为我试图使用Toast来通知流程的完成。Snackbar光环动画是否可消费?我希望它像Toast一样淡入/淡出。看起来像是的,使用
setAnimationMode(BaseTransientBottomBar.ANIMATION\u MODE\u fade)
。它可以放置在视图中的任何位置?请参见此处:Toast用于系统/关键类型的消息,因此在正确使用时,您不会希望它们在导航到其他地方时消失。另一种方法是使用SnackBar,当你离开时它会消失。这可能是因为我试图使用Toast来通知流程的完成。Snackbar光环动画是否可消费?我希望它和Toast一样淡入淡出。看起来像是的,使用
setAnimationMode(BaseTransientBottomBar.ANIMATION\u MODE\u fade)
。它可以放置在视图中的任何位置?请参见此处:是否有任何方法可以像在onPause()中一样在片段事务中使用Toast.cancel()?是否有任何方法可以使用Toast.cancel()在片段事务上,就像在onPause()中一样?