最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年07月13日 11:39:05   作者:Fndroid  
這篇文章主要為大家詳細(xì)介紹了Android重要控件SnackBar使用方法,以及使用SnackBar的心得,感興趣的小伙伴們可以參考一下

SnackBar是DesignSupportLibrary中的一個(gè)重要的控件,用于在界面下面提示一些關(guān)鍵信息,跟Toast不同的地方是SnackBar允許用戶向右滑動(dòng)消除它,同時(shí),也允許在SnackBar中設(shè)定一個(gè)Action,當(dāng)用戶點(diǎn)擊了SnackBar里面的按鈕的時(shí)候,可以進(jìn)行一些操作,所以,功能絕對(duì)是很強(qiáng)大的。 

SnackBar的構(gòu)造: 

// 參數(shù)分別是父容器,提示信息,持續(xù)時(shí)間public static Snackbar make(@NonNull View view, @NonNull CharSequence text,@Duration int duration) 

SnackBar的常用方法: 

// 用于給SnackBar設(shè)定一個(gè)Action,點(diǎn)擊之后會(huì)回調(diào)OnclickListener中的Onclick方法public Snackbar setAction(CharSequence text, final View.OnClickListener listener) 
// 用于設(shè)定Action的字體顏色public Snackbar setActionTextColor(@ColorInt int color) 
// 設(shè)定提示的字體public Snackbar setText(@NonNull CharSequence message) 
// 展示SnackBarpublic void show() 
// 清除SnackBarpublic void dismiss() 
// 設(shè)置回調(diào),比如OnDismissed或者OnShownpublic Snackbar setCallback(Callback callback) 

簡單是使用就不說了,這里直接說一下設(shè)置Action和設(shè)置Callback
要求:實(shí)現(xiàn)一個(gè)撤銷的操作,用戶點(diǎn)擊列表中每一項(xiàng)的刪除按鈕之后,刪除(數(shù)據(jù)庫中)對(duì)應(yīng)的行,然后彈出SnackBar提示是否撤銷,如果選擇是,則恢復(fù)刪除的行,否則刪除該行,效果如下 

思路: 
①先對(duì)我們要?jiǎng)h除的這個(gè)行進(jìn)行備份,然后在點(diǎn)擊刪除按鈕的時(shí)候把行刪除,把數(shù)據(jù)從源刪除,然后刷新 
②彈出SnackBar,設(shè)定Action,如果點(diǎn)了Yes,就把數(shù)據(jù)插入到源中,刷新 
③設(shè)定CallBack,監(jiān)聽SnackBar的消失事件,如果不是點(diǎn)擊Action而消失,則將數(shù)據(jù)從SQLite中刪除 
注意:這里為什么要設(shè)定監(jiān)聽?因?yàn)槿绻贿M(jìn)行監(jiān)聽,需要在刪除的時(shí)候訪問數(shù)據(jù)庫,撤銷是時(shí)候進(jìn)行數(shù)據(jù)庫的插入操作,這樣列表中的條目位置會(huì)發(fā)生改變

我們可以在Adapter中對(duì)刪除按鈕進(jìn)行監(jiān)聽,代碼如下:

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();
   }
  });

如果點(diǎn)擊了刪除按鈕,我們對(duì)數(shù)據(jù)進(jìn)行備份,然后刪除數(shù)據(jù)源mdata對(duì)應(yīng)的這個(gè)map,接下來刷新界面。然后第7行構(gòu)造了一個(gè)SnackBar,詢問是否撤銷刪除,并把持續(xù)時(shí)間設(shè)置為LONG以免用戶未閱讀完文字SnackBar就消失了。第8行設(shè)定了點(diǎn)擊的Action,提示信息為“YES”,并提供了點(diǎn)擊的監(jiān)聽。第9行設(shè)定了Callback,判斷SnackBar的消失狀態(tài)。第10行就直接把SnackBar展示出來。 

下面來看Action的點(diǎn)擊事件: 

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();
  }
 }

如果點(diǎn)擊了Action,就用備份的數(shù)據(jù)進(jìn)行恢復(fù)
下面看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消失的時(shí)候會(huì)回調(diào)這個(gè)方法,我們先判斷這個(gè)消失的類型,如果是點(diǎn)擊了Action,就不用刪除數(shù)據(jù)庫中的數(shù)據(jù),否則就對(duì)數(shù)據(jù)庫進(jìn)行刪除。 
SnackBar消失的類型對(duì)應(yīng)的常量: 

/** 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分別是滑動(dòng)清除、點(diǎn)擊Action、持續(xù)時(shí)間結(jié)束、調(diào)用dismiss方法以及有新的SnackBar產(chǎn)生
 因?yàn)槊看蜸nackBar消失的時(shí)候都是調(diào)用了dismiss方法,所以我們只需要判斷此時(shí)的狀態(tài)是否為滑動(dòng)清除、持續(xù)時(shí)間結(jié)束或者新的SnackBar產(chǎn)生,如果是,則證明用戶不需要撤銷,則對(duì)數(shù)據(jù)庫進(jìn)行刪除。 
最后,如果使用SnackBar,記得添加依賴??!

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin自定義View系列教程之標(biāo)尺控件(選擇身高、體重等)的實(shí)現(xiàn)

    Kotlin自定義View系列教程之標(biāo)尺控件(選擇身高、體重等)的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于Kotlin自定義View系列教程之標(biāo)尺控件(選擇身高、體重等)實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android實(shí)現(xiàn)MVVM架構(gòu)數(shù)據(jù)刷新詳解流程

    Android實(shí)現(xiàn)MVVM架構(gòu)數(shù)據(jù)刷新詳解流程

    MVVM架構(gòu)模式,即Model-View-ViewModel三個(gè)層級(jí),MVVM模式出來的時(shí)間已經(jīng)很長了,網(wǎng)上關(guān)于MVVM模式的解析也有很多,我這里只說一下我自己的理解,基本上是和MVP模式相比較的一個(gè)差異
    2021-10-10
  • Android獲取手機(jī)本機(jī)號(hào)碼的實(shí)現(xiàn)方法

    Android獲取手機(jī)本機(jī)號(hào)碼的實(shí)現(xiàn)方法

    這篇文章主要介紹了Android獲取手機(jī)本機(jī)號(hào)碼的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文大家能夠?qū)崿F(xiàn)這樣的方法,需要的朋友可以參考下
    2017-10-10
  • Android處理圖像數(shù)據(jù)轉(zhuǎn)換的各種方法

    Android處理圖像數(shù)據(jù)轉(zhuǎn)換的各種方法

    這篇文章主要介紹了Android處理圖像數(shù)據(jù)轉(zhuǎn)換的各種方法,本文講解了RGB值轉(zhuǎn)Bitmap、Color值轉(zhuǎn)Bitmap、字節(jié)數(shù)組轉(zhuǎn)Bitmap、讀取文件轉(zhuǎn)Bitmap、讀取資源轉(zhuǎn)Bitmap、輸入流轉(zhuǎn)Bitmap等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • View事件分發(fā)原理和ViewPager+ListView嵌套滑動(dòng)沖突

    View事件分發(fā)原理和ViewPager+ListView嵌套滑動(dòng)沖突

    這篇文章主要介紹了View事件分發(fā)原理和ViewPager+ListView嵌套滑動(dòng)沖突,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià),需要的小伙伴可以參考一下
    2022-05-05
  • Android實(shí)現(xiàn)音樂播放器鎖屏頁

    Android實(shí)現(xiàn)音樂播放器鎖屏頁

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)音樂播放器鎖屏頁,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 詳解Android中的Menu菜單鍵

    詳解Android中的Menu菜單鍵

    本文給大家介紹Android中的設(shè)置按鈕,長按或點(diǎn)擊菜單鍵,涉及到menu菜單的基本用法,本文介紹非常詳細(xì)具有參考價(jià)值,特此分享供大家學(xué)習(xí)
    2016-03-03
  • Android實(shí)現(xiàn)登錄注冊(cè)頁面(上)

    Android實(shí)現(xiàn)登錄注冊(cè)頁面(上)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)登錄注冊(cè)頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 實(shí)現(xiàn)activity管理器一次退出所有activity

    實(shí)現(xiàn)activity管理器一次退出所有activity

    退出所有Activity網(wǎng)上有很多很多種說法,推薦的一種方法是自定義一個(gè)Activity管理器,來管理所有已打開的Activity,要退出的時(shí)候再通過這個(gè)管理器來退出所有Activity,下面是一個(gè)簡單的Activity管理器代碼
    2014-01-01
  • Android編程實(shí)現(xiàn)獲取所有傳感器數(shù)據(jù)的方法

    Android編程實(shí)現(xiàn)獲取所有傳感器數(shù)據(jù)的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取所有傳感器數(shù)據(jù)的方法,涉及Android針對(duì)傳感器Sensor相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

杭锦旗| 河西区| 涞水县| 百色市| 新巴尔虎左旗| 昌宁县| 崇明县| 交口县| 张北县| 中方县| 长子县| 淮阳县| 嘉黎县| 凌海市| 陆丰市| 牡丹江市| 湟源县| 十堰市| 绵竹市| 达孜县| 墨竹工卡县| 嘉禾县| 个旧市| 任丘市| 北宁市| 东至县| 确山县| 辽阳市| 澜沧| 息烽县| 观塘区| 永登县| 巴彦淖尔市| 万荣县| 久治县| 手游| 紫金县| 双城市| 温宿县| 随州市| 特克斯县|