SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackBar中设定一个Action,当用户点击了SnackBar里面的按钮的时候,可以进行一些操作,所以,功能绝对是很强大的。
SnackBar的构造:
// 参数分别是父容器,提示信息,持续时间public static Snackbar make(@NonNull View view, @NonNull CharSequence text,@Duration int duration)
SnackBar的常用方法:
// 用于给SnackBar设定一个Action,点击之后会回调OnclickListener中的Onclick方法public Snackbar setAction(CharSequence text, final View.OnClickListener listener) // 用于设定Action的字体颜色public Snackbar setActionTextColor(@ColorInt int color) // 设定提示的字体public Snackbar setText(@NonNull CharSequence message) // 展示SnackBarpublic void show() // 清除SnackBarpublic void dismiss() // 设置回调,比如OnDismissed或者OnShownpublic Snackbar setCallback(Callback callback)
简单是使用就不说了,这里直接说一下设置Action和设置Callback
要求:实现一个撤销的操作,用户点击列表中每一项的删除按钮之后,删除(数据库中)对应的行,然后弹出SnackBar提示是否撤销,如果选择是,则恢复删除的行,否则删除该行,效果如下
思路:
①先对我们要删除的这个行进行备份,然后在点击删除按钮的时候把行删除,把数据从源删除,然后刷新
②弹出SnackBar,设定Action,如果点了Yes,就把数据插入到源中,刷新
③设定CallBack,监听SnackBar的消失事件,如果不是点击Action而消失,则将数据从SQLite中删除
注意:这里为什么要设定监听?因为如果不进行监听,需要在删除的时候访问数据库,撤销是时候进行数据库的插入操作,这样列表中的条目位置会发生改变
我们可以在Adapter中对删除按钮进行监听,代码如下:
delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { backupMap = mdata.get(position); mdata.remove(position); notifyDataSetChanged(); Snackbar snackBar = Snackbar.make(root, "是否撤销删除?", Snackbar.LENGTH_LONG); snackBar.setAction("YES", new MyOnClickListener(position)); snackBar.setCallback(new MyCallback()); snackBar.show(); } });
如果点击了删除按钮,我们对数据进行备份,然后删除数据源mdata对应的这个map,接下来刷新界面。然后第7行构造了一个SnackBar,询问是否撤销删除,并把持续时间设置为LONG以免用户未阅读完文字SnackBar就消失了。第8行设定了点击的Action,提示信息为“YES”,并提供了点击的监听。第9行设定了Callback,判断SnackBar的消失状态。第10行就直接把SnackBar展示出来。
下面来看Action的点击事件:
private class MyOnClickListener implements View.OnClickListener { private final int position; public MyOnClickListener(int position) { this.position = position; } @Override public void onClick(View v) { mdata.add(position, backupMap); notifyDataSetChanged(); } }
如果点击了Action,就用备份的数据进行恢复
下面看Callback:
private class MyCallback extends Snackbar.Callback { @Override public void onDismissed(Snackbar snackbar, int event) { super.onDismissed(snackbar, event); if (event == DISMISS_EVENT_SWIPE || event == DISMISS_EVENT_TIMEOUT || event == DISMISS_EVENT_CONSECUTIVE) { mdatabase.execSQL("delete from tally where id=?", new String[]{backupMap.get ("id").toString()}); } } }
这里看到我们重写了onDismissed方法,在SnackBar消失的时候会回调这个方法,我们先判断这个消失的类型,如果是点击了Action,就不用删除数据库中的数据,否则就对数据库进行删除。
SnackBar消失的类型对应的常量:
/** Indicates that the Snackbar was dismissed via a swipe.*/ public static final int DISMISS_EVENT_SWIPE = 0; /** Indicates that the Snackbar was dismissed via an action click.*/ public static final int DISMISS_EVENT_ACTION = 1; /** Indicates that the Snackbar was dismissed via a timeout.*/ public static final int DISMISS_EVENT_TIMEOUT = 2; /** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/ public static final int DISMISS_EVENT_MANUAL = 3; /** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/ public static final int DISMISS_EVENT_CONSECUTIVE = 4;
可以看到,从0到4分别是滑动清除、点击Action、持续时间结束、调用dismiss方法以及有新的SnackBar产生
因为每次SnackBar消失的时候都是调用了dismiss方法,所以我们只需要判断此时的状态是否为滑动清除、持续时间结束或者新的SnackBar产生,如果是,则证明用户不需要撤销,则对数据库进行删除。
最后,如果使用SnackBar,记得添加依赖!!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android控件ListView使用方法详解,包括了Android控件ListView使用方法详解的使用技巧和注意事项,需要的朋友参考一下 Android控件ListView使用方法介绍,具体如下 一、ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动。然后修改activity_main.xml中的代码,如下: 接下
本文向大家介绍Android中SeekBar拖动条控件使用方法详解,包括了Android中SeekBar拖动条控件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 SeekBar拖动条控件使用方法,具体内容如下 一、简介 1、 二、SeekBar拖动条控件使用方法 1、创建SeekBar控件 2、添加setOnSeekBarChangeListener监听 seekBar2.setOnSee
本文向大家介绍Android垂直滚动控件ScrollView使用方法详解,包括了Android垂直滚动控件ScrollView使用方法详解的使用技巧和注意事项,需要的朋友参考一下 一、简介 二、方法 1)ScrollView垂直滚动控件使用方法 1、在layout布局文件的最外层建立一个ScrollView控件 2、在ScrollView控件中加入一个LinearLayout控件,并且把它的ori
本文向大家介绍Android自带倒计时控件Chronometer使用方法详解,包括了Android自带倒计时控件Chronometer使用方法详解的使用技巧和注意事项,需要的朋友参考一下 公司的以前的项目,看到使用了这个Android自带的倒计时控件Chronometer,现在整合了一下 先看看效果: 方法简介: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍vant时间控件使用方法详解,包括了vant时间控件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vant时间控件的使用方法,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Bootstrap树形控件使用方法详解,包括了Bootstrap树形控件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 一、JQuery树形控件 Jquery树形控件是一款基于JQuery+bootstrap、完全通过js和样式手写出来的非常轻量级的控件,网上很多地方都能看到它的影子。它功能简单、用户体验不错。对于一些简单的层级关系展示比较实用,但对于节点的增删改实现起来就不容