国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2019-12-12 06:01:23
字體:
來源:轉載
供稿:網友

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,記得添加依賴!!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平南县| 宣化县| 四川省| 申扎县| 正阳县| 定襄县| 洮南市| 固镇县| 子长县| 黄山市| 泸州市| 北辰区| 织金县| 调兵山市| 长汀县| 华蓥市| 陵水| 嘉黎县| 卢氏县| 辽中县| 海淀区| 长兴县| 太保市| 乐业县| 平乐县| 日土县| 德钦县| 宾川县| 体育| 阳城县| 河北区| 延长县| 安岳县| 龙游县| 吴桥县| 墨玉县| 墨玉县| 馆陶县| 巴中市| 犍为县| 兴城市|