[英]Snackbar: how to identify which snackbar is shown
我有一个实现swipetorefresh
布局的recyclerview - 如果你在列表中向下滑动手指,它将加载更新的帖子。 它还有一个onloadmorelistener
,用于对我的onloadmorelistener
进行分页 - 如果你在onloadmorelistener
上向上滑动手指,它将加载较旧的帖子。
我正在尝试建立一个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.make
方法不允许这样做。
有没有人成功地解决了类似的问题?
使用snackbar回调。 例如,当它显示时将它添加到列表中,然后当调用回调时,将其删除,因此您只有可见的零食栏。 回调示例:
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) {
...
}
});
我将尝试将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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.