Android重要控件SnackBar使用方法详解

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,记得添加依赖!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中制作自定义dialog对话框的实例分享

    自定义dialog基础版 很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布局文件dialog: 代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

  • Android去除烦人的默认闪退Dialog

    安卓应用闪退后总会出现一个"抱歉,App已经停止运行"的弹窗,这样的用户体验并不好.很多大厂的App都去除了这个弹窗,因此本文主要介绍如何去除默认闪退弹窗,以及在闪退时做一些必要的善后工作. UnCaughtExceptionHandler UnCaughtExceptionHandler能够在Thread遇到未catch住的Exception而终止前做一些善后工作.但是它无法阻止线程停止运行,线程最后还是要退出. Thread.setDefaultUncaughtExceptionH

  • android之自定义Toast使用方法

    Android系统默认的Toast十分简洁,使用也非常的简单.但是有时我们的程序使用默认的Toast时会和程序的整体风格不搭配,这个时候我们就需要自定义Toast,使其与我们的程序更加融合. 使用自定义Toast,首先我们需要添加一个布局文件,该布局文件的结构和Activity使用的布局文件结构一致,在该布局文件中我们需设计我们Toast的布局,例如: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> &

  • Android中使用Toast.cancel()方法优化toast内容显示的解决方法

    产品在测试过程中发现一个bug,就是测试人员不停的疯狂的点击某个按钮,触发了toast以后,toast内容会一直排着队的显示出来,不能很快的消失.这样可能会影响用户的使用. 看到Toast有一个cancel()方法: 复制代码 代码如下: void cancel() Close the view if it's showing, or don't show it if it isn't showing yet. 做程序员的,基本一看api就知道,用这个可以取消上一个toast的显示,然后显示下一

  • 8种android 对话框(Dialog)使用方法详解

    本文汇总了android 8种对话框(Dialog)使用方法,分享给大家供大家参考,具体内容如下 1.写在前面 Android提供了丰富的Dialog函数,本文介绍最常用的8种对话框的使用方法,包括普通(包含提示消息和按钮).列表.单选.多选.等待.进度条.编辑.自定义等多种形式,将在第2部分介绍. 有时,我们希望在对话框创建或关闭时完成一些特定的功能,这需要复写Dialog的create().show().dismiss()等方法,将在第3部分介绍. 2.代码示例 2.1 普通Dialog(图

  • Android开发技巧之永不关闭的Toast信息框(长时间显示而非系统关闭)

    Toast信息提示框之所以在显示一定时间后会自动关闭,是因为在系统中有一个Toast队列.系统会依次从队列中取(出队列)一个Toast,并显示它.在显示一段时间后,再关闭,然后再显示下一个Toast信息提示框.直到Toast队列中所有Toast都显示完为止.那么有些时候需要这个Toast信息提示框长时间显示,直到需要关闭它时通过代码来控制,而不是让系统自动来关闭Toast信息提示框.不过这个要求对于Toast本身来说有些过分,因为Toast类并没有提供这个功能.虽然如此,但方法总比问题多.通过一

  • Android提醒微技巧你真的了解Dialog、Toast和Snackbar吗

    Dialog和Toast所有人肯定都不会陌生的,这个我们平时用的实在是太多了.而Snackbar是Design Support库中提供的新控件,有些朋友可能已经用过了,有些朋友可能还没去了解.但是你真的知道什么时候应该使用Dialog,什么时候应该使用Toast,什么时候应该使用Snackbar吗?本篇文章中我们就来学习一下这三者使用的时机,另外还会介绍一些额外的技巧. 1. Dialog 首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使用的: AlertDialog.Bu

  • Android中AlertDialog各种对话框的用法实例详解

    目标效果: 程序运行,显示图一的几个按钮,点击按钮分别显示图二到图六的对话框,点击对话框的某一项或者按钮,也会显示相应的吐司输出. 1.activity_main.xml页面存放五个按钮. activity_main.xml页面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&

  • Android重要控件SnackBar使用方法详解

    SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackBar中设定一个Action,当用户点击了SnackBar里面的按钮的时候,可以进行一些操作,所以,功能绝对是很强大的. SnackBar的构造: // 参数分别是父容器,提示信息,持续时间public static Snackbar make(@NonNull View view, @NonNull

  • Android基础控件RadioGroup使用方法详解

    本文为大家分享了Android基础控件RadioGroup的使用,供大家参考,具体内容如下 1.简单介绍 RadioGroup可以提供几个选项供用户选择,但只能选择其中的一个.其下面可以横着或者竖着挂几个RadioButton,也可以挂载其他控件(如TextView).RadioGroup的相应事件一般不由下面的RadioButton响应,而是直接由RadioGroup响应.实现RadioGroup.OnCheckedChangeListener接口即可监听RadioGroup.RadioBut

  • Android第三方控件PhotoView使用方法详解

    PhotoView的简介: 这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点击放大缩小.支持在ViewPager中翻页浏览图片. PhotoView 是一款扩展自Android ImageView ,支持通过单点/多点触摸来进行图片缩放的智能控件.功能实用和强大. PhotoView的功能: 图片浏览查看 双指缩放 单点触摸缩放 图片缩放模式设置 基本用法: 导入jar包,布局XML里设置PhotoView 将ImageView传入PhotoViewAttacher 代码演

  • Android常用控件ImageSwitcher使用方法详解

    图像切换器使用ImageSwitcher表示,用于实现类似于Windows操作系统下的"Windows照片查看器"中的上一张.下一张切换图片的功能.在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法创建用于显示图片的ImageView对象.makeView()方法将返回一个显示图片的ImageView.在使用ImageSwitcher组件时,还有一个非常重要的方法,那就是setImageResource()方

  • Android控件ListView使用方法详解

    Android控件ListView使用方法介绍,具体如下 一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

  • Android Chronometer控件实现计时器函数详解

    本文为大家演示了如何使用Chronometer控件实现Android计时器的实例. 先贴上最终的实现效果图: Android计时器实现思路 使用Chronometer控件实现计器的操作.通过设置setBase(long base)来设置初始时间,然后为其添加一个 setOnChronometerTickListener(Chronometer.OnChronometerTickListener l)事件来判断时间是否到了,然后再调用其stop()方法实现停止计时. Android计时器实现代码

  • Android自带倒计时控件Chronometer使用方法详解

    公司的以前的项目,看到使用了这个Android自带的倒计时控件Chronometer,现在整合了一下 先看看效果: <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_content" android:layout_height="30dp" /> <Button android:onClick="start" andro

  • Android垂直滚动控件ScrollView使用方法详解

    一.简介 二.方法 1)ScrollView垂直滚动控件使用方法 1.在layout布局文件的最外层建立一个ScrollView控件 2.在ScrollView控件中加入一个LinearLayout控件,并且把它的orientation设置为vertical 3.在LinearLayout控件中放入多个装有图片的ImageView控件 三.代码实例 1.效果图 2.代码 /Ex27ScrollView/src/fry/Activity01.java <?xml version="1.0&q

  • Android进度条控件progressbar使用方法详解

    一.简介 二.方法 1)进度条ProgressBar使用方法 1.在layout布局文件中创建ProgressBar控件 <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:progress="30&

  • Android控件AppWidgetProvider使用方法详解

    介绍 AppWidgetProvider是Android中提供的用于实现桌面小工具的类,其本质是一个广播,即BroadcastReceiver,在实际的使用中,把AppWidgetProvider当成一个BroadcastReceiver即可 1. 为AppWidget提供一个文件定义小控件的基本配置信息 在资源文件夹res目录下新建xml文件夹,添加app_widget_provider_info.xml文件内容为: <?xml version="1.0" encoding=&

随机推荐