<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                我們看一下實際項目中常用的例子:Snackbar。幾年前,它被添加到Android支持庫中,以取代作為用戶和應用程序之間的消息傳遞接口長期服務的Toast。它解決了一些問題并引入了一種全新的外觀,基本使用方式如下: ``` Snackbar.make(parentView, message_text, duration) .setAction(action_text, click_listener) .show(); ``` 但是實際中使用它的API會給代碼增加不必要的復雜性:**我們不希望每次都定義我們想要顯示消息的時間,并且在填充一堆參數后,為什么我們還要額外調用show()?** 著名的開源項目**Anko擁有Snackbar的輔助函數,使其更易于使用并使代碼更簡潔**: ``` snackbar(parentView, action_text, message_text) { click_listener } ``` 其中一些參數是可選的,所以我們一般這么使用: ``` snackbar(parentView, "message") ``` anko中的snackbar的部分源碼如下: ``` inline fun View.snackbar(message: Int, @StringRes actionText: Int, noinline action: (View) -> Unit) = Snackbar .make(this, message, Snackbar.LENGTH_SHORT) .setAction(actionText, action) .apply { show() } ``` 但是這樣就夠了嗎?我們想讓它更短,對于大多數情況,我們需要的唯一參數是消息。所以我們的調用方式是: ``` snackbar("message") ``` 因為我們關心的僅僅是在屏幕底部顯示我們的消息,所以需要消除視圖參數。幸運的是,借助擴展函數,在Activity中獲取根視圖可以通過使用Anko中的`find (android.R.id. content)`來完成。改良后的Activity的擴展方法如下所示: ``` inline fun Activity.snackbar(message: String) = snackbar(find (R.id.content), message) ``` 除了在Activity中,我們通常還在哪里使用Snackbar呢?**Android UI中還有兩個重要的組件:Fragment和View**。在Fragment中,有一個它所在的Activity的引用。所以實現我們的解決方案要容易得多: ``` inline fun Fragment.snackbar(message: String) = snackbar(activity.find (R.id. content), message) ``` 而View并不一定附加在Activity上,我們要做出防御式判斷,即:在我們嘗試顯示Snackbar之前,我們必須確保View的context屬性隱藏了一個Activity實例: ``` inline fun View.snackbar(message: String) { val activity = context if (activity is Activity) snackbar(activity.find(android.R.id.content), message) else throw IllegalStateException("視圖必須要承載在Activity上.") } ``` 小練習 上述例子結合Anko的`find(R.id)`使用,你是否能夠改寫為不依賴Anko呢?動手嘗試一下吧!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看