Snackbar 堆栈将始终只显示最后一个 snackbar
Snackbar stack will always show only the last snackbar
Snackbar.make(...).show()
只会显示最后一个 snackbar,不像 toast 其他的 snackbar 都没有了。
for(int i = 1;i < 11;i++) {
Snackbar.make(..., "number: " + i, Snackbar.LENGTH_SHORT).show();
}
有时当 snackbar 应该在网络任务之后显示而一个应该在网络任务之前显示时,seconds snackbar 永远不会显示。
我正在使用协调布局。
请参考 Android 组件文档:
Snackbars automatically time out from the screen. For usability reasons, snackbars should not contain the only way to access a core use case. They should not be persistent or be stacked, as they are above other elements on screen (Source)
我现在实现了自己的队列:
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();
}
Snackbar.make(...).show()
只会显示最后一个 snackbar,不像 toast 其他的 snackbar 都没有了。
for(int i = 1;i < 11;i++) {
Snackbar.make(..., "number: " + i, Snackbar.LENGTH_SHORT).show();
}
有时当 snackbar 应该在网络任务之后显示而一个应该在网络任务之前显示时,seconds snackbar 永远不会显示。
我正在使用协调布局。
请参考 Android 组件文档:
Snackbars automatically time out from the screen. For usability reasons, snackbars should not contain the only way to access a core use case. They should not be persistent or be stacked, as they are above other elements on screen (Source)
我现在实现了自己的队列:
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();
}