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

 更新时间:2016年07月13日 11:39:05   作者:Fndroid  
这篇文章主要为大家详细介绍了Android重要控件SnackBar使用方法,以及使用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,记得添加依赖!!

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

相关文章

  • Kotlin自定义View系列教程之标尺控件(选择身高、体重等)的实现

    Kotlin自定义View系列教程之标尺控件(选择身高、体重等)的实现

    这篇文章主要给大家介绍了关于Kotlin自定义View系列教程之标尺控件(选择身高、体重等)实现的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • Android实现MVVM架构数据刷新详解流程

    Android实现MVVM架构数据刷新详解流程

    MVVM架构模式,即Model-View-ViewModel三个层级,MVVM模式出来的时间已经很长了,网上关于MVVM模式的解析也有很多,我这里只说一下我自己的理解,基本上是和MVP模式相比较的一个差异
    2021-10-10
  • Android获取手机本机号码的实现方法

    Android获取手机本机号码的实现方法

    这篇文章主要介绍了Android获取手机本机号码的实现方法的相关资料,希望通过本文大家能够实现这样的方法,需要的朋友可以参考下
    2017-10-10
  • Android处理图像数据转换的各种方法

    Android处理图像数据转换的各种方法

    这篇文章主要介绍了Android处理图像数据转换的各种方法,本文讲解了RGB值转Bitmap、Color值转Bitmap、字节数组转Bitmap、读取文件转Bitmap、读取资源转Bitmap、输入流转Bitmap等内容,需要的朋友可以参考下
    2015-01-01
  • View事件分发原理和ViewPager+ListView嵌套滑动冲突

    View事件分发原理和ViewPager+ListView嵌套滑动冲突

    这篇文章主要介绍了View事件分发原理和ViewPager+ListView嵌套滑动冲突,文章围绕主题展开详细的内容介绍,具有一定的参考价,需要的小伙伴可以参考一下
    2022-05-05
  • Android实现音乐播放器锁屏页

    Android实现音乐播放器锁屏页

    这篇文章主要为大家详细介绍了Android实现音乐播放器锁屏页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 详解Android中的Menu菜单键

    详解Android中的Menu菜单键

    本文给大家介绍Android中的设置按钮,长按或点击菜单键,涉及到menu菜单的基本用法,本文介绍非常详细具有参考价值,特此分享供大家学习
    2016-03-03
  • Android实现登录注册页面(上)

    Android实现登录注册页面(上)

    这篇文章主要为大家详细介绍了Android实现登录注册页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 实现activity管理器一次退出所有activity

    实现activity管理器一次退出所有activity

    退出所有Activity网上有很多很多种说法,推荐的一种方法是自定义一个Activity管理器,来管理所有已打开的Activity,要退出的时候再通过这个管理器来退出所有Activity,下面是一个简单的Activity管理器代码
    2014-01-01
  • Android编程实现获取所有传感器数据的方法

    Android编程实现获取所有传感器数据的方法

    这篇文章主要介绍了Android编程实现获取所有传感器数据的方法,涉及Android针对传感器Sensor相关操作技巧,需要的朋友可以参考下
    2017-06-06

最新评论