2015-12-31 39 views
3

我有一个实现了swipetorefresh布局recyclerview - 如果你轻扫手指在列表中向下,将会加载新的职位。它也有一个onloadmorelistener供应进行分页我recyclerview - 如果你向上滑动手指的recyclerview,它会加载旧帖子。小吃吧:如何识别哪些小吃吧显示

我试图建立一个snackbar通知,如果用户不在线并且他尝试完成某种类型的网络活动(如加载新帖子或新帖子),快捷栏会显示告诉他“没有互联网”。

在没有互联网和用户刷向上并刷向下recyclerview的情况下,显示相同的“没有网络”消息2个小吃吧通知被示出。我其实只是想要展示一个。

因此,我正在寻找一些独特的方式来识别快餐栏中显示的文本,以便如果两个快餐栏中的文本相同,则只显示一个快餐栏,但快餐栏中没有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.make法不允许这样一个独特的标志。

任何人都已经成功地解决类似这样的问题吗?

回答

5

使用小吃吧回调。当它被显示时将它添加到列表中,例如,当回调被调用时,将其删除,这样你只有仍然可见的小吃店。例如回调:

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) { 
     ... 
    } 
    }); 
+0

不知道你是什么意思的小吃吧添加到列表中...当有多个,这如何帮助小吃店,你需要确定显示哪一个,以防止显示两个类似的小吃店?例如,你可以有两个“没有互联网”的小吃店和一个“撤销”小吃店,你怎么只显示一个“没有互联网小吃店,然后是一个”撤销“小吃店?我找不到唯一识别哪个小吃店的方法 – Simon

+0

的3个小吃店,你可以使用HashMap代替,连键是显示的信息,所以每次你启动一个小吃吧,你检查是否匹配键的值是空的或还在忙碌。这样,您只启动小吃吧,如果Hashmap中的关联对具有一个空值 – Helmi

+0

您可以用代码来证明这一点吗? – Simon

2

我会尽量放什么希勒米说,在代码

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