7

我有一个实现swipetorefresh布局的 recyclerview - 如果您在列表中向下滑动手指,它将加载更新的帖子。它还有一个onloadmorelistener用于对我的 recyclerview 进行分页的功能——如果你在 recyclerview 上滑动手指,它会加载较旧的帖子。

我正在尝试构建一个snackbar通知,如果用户离线并且他尝试完成某种类型的网络活动,例如加载旧帖子或新帖子,则会出现小吃栏,告诉他“没有互联网”。

在没有互联网的情况下,用户在 recyclerview 上向上滑动和向下滑动,会显示两个显示相同“无互联网”消息的小吃店通知。实际上,我只想显示一个。

因此,我正在寻找一些独特的方法来识别小吃栏中显示的文本,这样如果两个小吃栏中的文本相同,则只会显示一个小吃栏,但小吃栏中没有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方法不允许这样做。

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

4

2 回答 2

11

使用小吃吧回调。例如,当它显示时将其添加到列表中,然后在调用回调时将其删除,因此您只有仍然可见的小吃店。回调示例:

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) {
       ...
    }
  });
于 2015-12-31T13:28:36.297 回答
5

我会试着把 Helmi 说的写在代码上

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(); 
    }
}
于 2016-09-21T14:41:32.487 回答