Search code examples
androidandroid-design-libraryandroid-snackbar

Snackbar stack will always show only the last snackbar


The Snackbar.make(...).show() will only show the last snackbar unlike toast the other snackbars are gone.

for(int i = 1;i < 11;i++) {  
   Snackbar.make(..., "number: " + i, Snackbar.LENGTH_SHORT).show();
}

Sometimes when the snackbar should show after network task and one should show before network task, the seconds snackbar is never shown.

Im using a coordinatorlayout.


Solution

  • I implemented now my own queue:

    protected ArrayList<Snackbar> mSnackbarList = new ArrayList<>();
    
    protected Snackbar.Callback mCallback = new Snackbar.Callback() {
        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            mSnackbarList.remove(snackbar);
            if (mSnackbarList.size() > 0)
               displaySnackbar(mSnackbarList.get(0));
        }
    };
    
    public void addQueue(Snackbar snackbar){
        setLayoutParams(snackbar);
        snackbar.setCallback(mCallback);
        boolean first = mSnackbarList.size() == 0;
        mSnackbarList.add(snackbar);
        if(first)
            displaySnackbar(snackbar);
    }
    
    public void displaySnackbar(Snackbar snackbar){
        snackbar.show();
    }