Kotlin的android擴展:對findViewById說再見(KAD 04)

来源:http://www.cnblogs.com/figozhg/archive/2016/12/15/6185155.html
-Advertisement-
Play Games

作者講解在Kotlin中Android擴展是如何替代 findViewById 的。 ...


作者:Antonio Leiva

時間:Dec 12, 2016

原文鏈接:http://antonioleiva.com/kotlin-android-extensions/

 

 

你也許已厭倦日復一日使用findViewById編寫Android視圖。或是你可能放棄它轉而使用著名的Butterknife庫。那麼你將會喜愛Kotlin的Android擴展。

 

Kotlin的Android擴展

Kotlin的Android擴展是Kotlin插件的正規插件之一,它無縫覆蓋Activities的視圖,Fragments y視圖。

 

讓我們看看它是怎樣簡單。

 

在我們代碼中集成Kotlin的Android擴展

雖然你要使用一插件時可以將其集成到代碼中,但是你還是需要在Android模塊中填加額外的apply:

1 apply plugin: 'com.android.application'
2 apply plugin: 'kotlin-android'
3 apply plugin: 'kotlin-android-extensions'

這些都是你需要添加的。這樣你就準備好使用它。

在Activity或Fragment中覆蓋視圖

此時,在你的Activity或Fragment中覆蓋視圖與直接在XML中用視圖id定義一樣方便。

 

想象你有這樣的XML:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6  
 7     <TextView
 8         android:id="@+id/welcomeMessage"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center"
12         android:text="Hello World!"/>
13  
14 </FrameLayout>

如你所見,TestView有welcomeMessage id。

 

只需在你的MainActivity這樣編寫:

1 override fun onCreate(savedInstanceState: Bundle?) {
2     super.onCreate(savedInstanceState)
3     setContentView(R.layout.activity_main)
4  
5     welcomeMessage.text = "Hello Kotlin!"
6 }

 

為了能夠使用它,你需要專門import(這句我寫在下麵),而且IDE能夠自動添加引入(import)它。這不是很容易嗎!

import kotlinx.android.synthetic.main.activity_main.*

 

插件生成代碼能夠存儲視圖緩存(cache),這樣你再次訪問視圖時,就不需要另一個findViewById。

 

由一個視圖覆蓋其它視圖

我們有這樣的視圖:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2               android:orientation="vertical"
 3               android:layout_width="match_parent"
 4               android:layout_height="match_parent">
 5     
 6     <ImageView
 7         android:id="@+id/itemImage"
 8         android:layout_width="match_parent"
 9         android:layout_height="200dp"/>
10     
11     <TextView
12         android:id="@+id/itemTitle"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"/>
15  
16 </LinearLayout>

如你在其內添加adapter。

 

你只需用這個插件,就可直接訪問子視圖:

1 val itemView = ...
2 itemView.itemImage.setImageResource(R.mipmap.ic_launcher)
3 itemView.itemTitle.text = "My Text"

 

儘管插件也幫助你填寫了import,不過這類有一點點不同:

import kotlinx.android.synthetic.main.view_item.view.*

 

對此有一些事情你需要知道:

  1. 在編譯時,你可以從任何其他視圖引用任何視圖。這意味著你可以從一視圖引用任何視圖,而非一定是其的子視圖。但是,在運行時這將失敗,這是因為其試圖覆蓋的視圖不存在。
  2. 在這種情況下,視圖沒有為ActivitiesFragments緩存起來。

 

 

但是,你只要仔細利用它,它還是非常有用的工具。

 

結論

 

你已經知道怎樣在Kotlin中方便的處理Android視圖。用一個簡單的插件,我們就可以在擴展後忽略所有那些涉及視圖恢復的糟糕代碼。這插件將按照我們的要求特性產生沒有任何問題的正確的類型。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言聲明: 本文這是作者隨筆,文筆隨(tai)意(cha),顧如有不嚴謹之處,歡迎指出(求不打臉)。 在某人際關係app上看到一道題: 當然,每個人可能都有自己的答案,作為程式員,我給了以下答案,不是最佳。 ************************* Fen Ge Xian ******** ...
  • <! TOC "FEE Development Essentials" "JS Basic" "function" "call() and apply()" "func1.bind(thisObj,arg1...argn)" "Custom object" "prototype" "Serializ ...
  • 第一種: function Person() { this.username = new Array(); this.password = "123"; } Person.prototype.getInfo = function() { alert(this.username + ", " + th ...
  • ie6對hover相容性問題的解決: 1,在body里添加以下樣式: behavior:url(../scripts/csshover.htc); csshover.htc可直接在網上下載 2,js解決 判斷是否為ie6 window.onload=function(){ var isIE=!!wi ...
  • 效果圖: 點擊菜單 中英文切換 css樣式: .top-nav { font-size: 12px; font-weight: bold; list-style: none; border-bottom: 8px solid #DC4E1B; overflow: auto; //去浮動,使下級的浮動 ...
  • 用 :empty 區分空元素 相容性:不支持 IE8 Demo 假如我們有以上列表: <div class="item">a</div> <div class="item">b</div> <div class="item"></div> 我們希望可以對空元素和非空元素區別處理,那麼有兩種方案。 用 ...
  • window.screen.availWidth 返回當前屏幕寬度(空白空間) window.screen.availHeight 返回當前屏幕高度(空白空間) window.screen.width 返回當前屏幕寬度(解析度值) window.screen.height 返回當前屏幕高度(解析度值 ...
  • 1 「喂飽」用戶的三個方法 最近,我看到有創業者開始為自己的用戶增長緩慢而發愁。 實際上,如果將自己的產品當成精心為用戶烹調的牛排,用戶吃一口就放下了餐具。這是火候的問題嗎?是調料問題嗎?還是擺盤裝飾的問題?......也許都不是,這個時候你更應該問自己一個問題:現在用戶是否正處於饑餓的狀態? 那飢 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...