Как отменить показ сложенных тостов после изменения фрагмента? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу удалить сложены Android Тосты после того, как пользователь перейдет к другому фрагменту. У меня есть фрагменты, которые сложены, и в каждом фрагменте у меня есть две кнопки, которые вызывают разные сообщения тостов. Когда операции фрагмента завершены, и пользователь переходит к другому фрагменту или нажимает кнопку возврата, тосты продолжают отображать . В основном это происходит, когда пользователь нажимает кнопки слишком быстро и заставляет тосты складываться.

Или когда я создаю экземпляры глобальных объектов Toast и вызываю cancel (), оба тоста перестают отображаться в этом жизненном цикле фрагмента независимо от того, сколько раз пользователь нажал кнопку.

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;
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

чтобы избежать сложения тостов, я повторно использую один тост

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();
}
1 голос
/ 09 апреля 2020

Не используйте глобальный Toast объект, вместо этого вы должны использовать несколько экземпляров Toast. Таким образом, вы можете отменить его один за другим.

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

toast1.cancel()

...