Android開發學習之路-SnackBar使用心得

來源:互聯網
上載者:User

標籤:

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)
// 展示SnackBar
public void show()
// 清除SnackBar
public void dismiss()
// 設定回調,比如OnDismissed或者OnShown
public Snackbar setCallback(Callback callback)

簡單是使用就不說了,這裡直接說一下設定Action和設定Callback

要求:實現一個撤銷的操作,使用者點擊列表中每一項的刪除按鈕之後,刪除(資料庫中)對應的行,然後彈出SnackBar提示是否撤銷,如果選擇是,則恢複刪除的行,否則刪除該行,效果如下

思路:

①先對我們要刪除的這個行進行備份,然後在點擊刪除按鈕的時候把行刪除,把資料從源刪除,然後重新整理

②彈出SnackBar,設定Action,如果點了Yes,就把資料插入到源中,重新整理

③設定CallBack,監聽SnackBar的消失事件,如果不是點擊Action而消失,則將資料從SQLite中刪除

注意:這裡為什麼要設定監聽?因為如果不進行監聽,需要在刪除的時候訪問資料庫,撤銷是時候進行資料庫的插入操作,這樣列表中的條目位置會發生改變

我們可以在Adapter中對刪除按鈕進行監聽,代碼如下:

 1 delete.setOnClickListener(new View.OnClickListener() { 2             @Override 3             public void onClick(View v) { 4                 backupMap = mdata.get(position); 5                 mdata.remove(position); 6                 notifyDataSetChanged(); 7                 Snackbar snackBar = Snackbar.make(root, "是否撤銷刪除?", Snackbar.LENGTH_LONG); 8                 snackBar.setAction("YES", new MyOnClickListener(position)); 9                 snackBar.setCallback(new MyCallback());10                 snackBar.show();11             }12         });

如果點擊了刪除按鈕,我們對資料進行備份,然後刪除資料來源mdata對應的這個map,接下來重新整理介面。然後第7行構造了一個SnackBar,詢問是否撤銷刪除,並把期間設定為LONG以免使用者未閱讀完文字SnackBar就消失了。第8行設定了點擊的Action,提示資訊為“YES”,並提供了點擊的監聽。第9行設定了Callback,判斷SnackBar的消失狀態。第10行就直接把SnackBar展示出來。

下面來看Action的點擊事件:

 1 private class MyOnClickListener implements View.OnClickListener { 2         private final int position; 3  4         public MyOnClickListener(int position) { 5             this.position = position; 6         } 7  8         @Override 9         public void onClick(View v) {10             mdata.add(position, backupMap);11             notifyDataSetChanged();12         }13     }

如果點擊了Action,就用備份的資料進行恢複

下面看Callback:

 1 private class MyCallback extends Snackbar.Callback { 2         @Override 3         public void onDismissed(Snackbar snackbar, int event) { 4             super.onDismissed(snackbar, event); 5             if (event == DISMISS_EVENT_SWIPE || event == DISMISS_EVENT_TIMEOUT || event == 6                     DISMISS_EVENT_CONSECUTIVE) { 7                 mdatabase.execSQL("delete from tally where id=?", new String[]{backupMap.get 8                         ("id").toString()}); 9             }10         }11     }

這裡看到我們重寫了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開發學習之路-SnackBar使用心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.