【问题标题】:Snackbar stack will always show only the last snackbar小吃店堆栈将始终仅显示最后一个小吃店
【发布时间】:2016-03-13 02:00:16
【问题描述】:

Snackbar.make(...).show() 只会显示最后一个小吃店,不像吐司其他小吃店都不见了。

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

有时当snackbar应该在网络任务之后显示而一个应该在网络任务之前显示时,秒snackbar永远不会显示。

我正在使用协调器布局。

【问题讨论】:

  • Snackbars 不用于记录目的,为此使用 Log.d
  • 这只是一个例子,因为网络延迟 2 个小吃店同时显示

标签: android android-design-library android-snackbar


【解决方案1】:

我现在实现了我自己的队列:

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

【讨论】:

    【解决方案2】:

    请参考 Android 组件文档:

    Snackbars 会自动在屏幕上超时。出于可用性原因,snackbars 不应包含访问核心用例的唯一方法。它们不应保持或堆叠,因为它们位于屏幕上的其他元素之上 (Source)

    【讨论】:

    • 您认为这是在网络请求堆叠之后和之前显示的?
    猜你喜欢
    • 2020-05-18
    • 2016-04-01
    • 2018-05-04
    • 2020-04-07
    • 1970-01-01
    • 2021-07-10
    • 2020-07-25
    • 2019-01-29
    • 2018-09-27
    相关资源
    最近更新 更多