2015-12-31 41 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(); 
    } 
}