首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snackbar:如何识别显示哪个snackbar

Snackbar:如何识别显示哪个snackbar
EN

Stack Overflow用户
提问于 2015-12-31 21:24:37
回答 2查看 6K关注 0票数 7

我有一个回收器视图,它实现了swipetorefresh布局--如果你向下滑动你的手指,它将加载更新的帖子。它还有一个onloadmorelistener,可以对我的回收站视图进行分页--如果你在回收站视图上滑动手指,它就会加载较旧的帖子。

我正在尝试建立一个snackbar通知,如果用户离线,他试图完成某种类型的网络活动,如加载旧的或新的帖子,快餐栏将出现,告诉他“没有互联网”。

在没有互联网的情况下,用户在回收器视图上向上和向下滑动,会显示两个快捷栏通知,显示相同的“没有互联网”消息。实际上,我只想展示一个。

因此,我正在寻找一些独特的方法来识别snackbar中显示的文本,以便如果两个snackbar中的文本相同,则只显示一个snackbar,但snackbar中没有getText()方法,只有setText()http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.html

我还看到有一些回调方法:http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.Callback.html,但在我的场景中似乎没有一个方法有帮助。

我希望有一个唯一的标志,当创建snackbar用于标识目的时,我可以给它一个唯一的标志,但是Snackbar.make方法不允许这样做。

有没有人成功地解决了类似的问题?

EN

回答 2

Stack Overflow用户

发布于 2015-12-31 21:28:36

使用snackbar回调。例如,当它显示时,将其添加到列表中,然后在调用回调时将其删除,这样您仍然只有可见的snackbars。回调示例:

代码语言:javascript
复制
snackbar.setCallback(new Snackbar.Callback() {

    @Override
    public void onDismissed(Snackbar snackbar, int event) {
      //see Snackbar.Callback docs for event details
      ...  
    }

    @Override
    public void onShown(Snackbar snackbar) {
       ...
    }
  });
票数 10
EN

Stack Overflow用户

发布于 2016-09-21 22:41:32

我会试着把Helmi所说的放到代码中

代码语言:javascript
复制
private Map<String, String> snackbarList = new HashMap<>();
private CoordinatorLayout mCoordinatorLayout;

private void displaySnackbarIfNotShown(String snackbarText) {
    //Check if the snackbar is already on the list
    if(snackbarList.containsKey(snackbarText)){
        //Snackbar already exist, you may update its text or ignore it
    } else {
        Snackbar mySnackbar = Snackbar.make(mCoordinatorLayout, R.string.prompt_adjust_map,
                                            Snackbar.LENGTH_INDEFINITE);

        mySnackbar.setCallback(new Snackbar.Callback() {
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                //Remove from the snackbar list
                snackbarList.remove(snackbarText);
            }

            @Override
            public void onShown(Snackbar snackbar) {
                //Add to the snackbar list
                snackbarList.put(snackbarText, "");
            }
        });
        mySnackbar.show(); 
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34547137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档