Android 之 ViewBinding 實現更安全、高效的視圖綁定

??一、配置說明??

  1. ??作用位置??

    需在模塊級?build.gradle或?build.gradle.kts文件的?android {}塊內添加:

    android {buildFeatures {viewBinding = true // Kotlin DSL 語法}
    }
    android {buildFeatures {viewBinding true // Groovy 語法}
    }

  2. ??生成規則??

    • 為每個 XML 布局文件(如?activity_main.xml)生成對應的綁定類(如?ActivityMainBinding)。

    • 綁定類包含布局中所有帶?android:id的視圖引用,無需手動調用?findViewById()

  3. ??忽略特定布局??

    若無需為某布局生成綁定類,可在其根節點添加:

<LinearLayout...tools:viewBindingIgnore="true">
</LinearLayout>

二、使用示例??

??1. Activity 中綁定視圖?
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root) // 設置根視圖// 直接訪問視圖(類型安全 & 空安全)binding.textView.text = "Hello, View Binding!"binding.button.setOnClickListener { Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show()}}
}
2. Fragment 中綁定視圖(避免內存泄漏)?
class ExampleFragment : Fragment() {private var _binding: FragmentExampleBinding? = nullprivate val binding get() = _binding!! // 非空斷言override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {_binding = FragmentExampleBinding.inflate(inflater, container, false)return binding.root}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {binding.textView.text = "Fragment Loaded"}override fun onDestroyView() {super.onDestroyView()_binding = null // 釋放視圖引用}
}

三、核心優勢??

??特性??

??說明??

??類型安全??

自動推斷視圖類型(如?TextView而非?View),避免強制轉換錯誤

??空安全??

僅綁定布局中聲明?id的視圖,避免?NullPointerException

??性能優化??

編譯時生成代碼,無運行時反射開銷,比?findViewById快 2-3 倍

??代碼簡潔??

一行綁定代替多次?findViewById,減少模板代碼

五、與 DataBinding 對比??

??特性??

View Binding

Data Binding

??視圖綁定??

?

?

??數據綁定??

?

?(支持?@{}表達式)

??雙向綁定??

?

?

??性能開銷??

?? 接近零開銷

?? 較高(需處理表達式邏輯)

??適用場景??

純 UI 操作

數據驅動 UI(如 MVVM 架構)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92151.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全球首款Java專用AI開發助手實測:一句話生成完整工程代碼——飛算 JavaAI

&#x1f31f; 嗨&#xff0c;我是Lethehong&#xff01;&#x1f31f;&#x1f30d; 立志在堅不欲說&#xff0c;成功在久不在速&#x1f30d;&#x1f680; 歡迎關注&#xff1a;&#x1f44d;點贊??留言收藏&#x1f680;&#x1f340;歡迎使用&#xff1a;小智初學計算機…

Shader開發(七)創建第一個Shader項目

在前面的章節中&#xff0c;我們已經了解了Shader的基本概念和渲染管線的工作原理。現在&#xff0c;是時候動手實踐了&#xff01;本章將帶您一步步創建第一個Shader項目&#xff0c;開啟真正的Shader開發之旅。 為什么選擇openFrameworks&#xff1f; 與其他文章不同&#x…

IAR軟件中測量函數執行時間

通常在調試代碼中需要直到某個函數或者某段代碼的實際執行時間&#xff0c;在IAR中可以直接借助軟件提供的工具來計算代碼執行時間。 第一種方法 進入仿真調試界面&#xff0c;在需要測量的代碼前面打斷點。工具欄中選擇 ST-LINK — Data Log Summary在 Data Log Summary 窗口中…

Java 字節碼文件(.class)的組成詳解

文章目錄基礎信息常量池字段方法屬性字節碼文件內容說明案例文件基本信息類的基本信息常量池字段信息構造方法實例方法主方法源文件信息字節碼文件由五部分組成&#xff0c;分別是基礎信息、常量池、字段、方法、屬性。案例&#xff1a; public class Main implements Interfa…

C++之vector類的代碼及其邏輯詳解 (下)

1. insert()這個就是在指定位置插入一個元素&#xff0c;首先計算要插入的這個位置和開頭之間的距離&#xff0c;接著判斷那個_finish 有沒有碰到_endofstorage 或者_endofstorage 是不是為0&#xff0c;如果滿足條件&#xff0c;那就進行擴容&#xff0c;然后接著重新計算距離…

【自動化測試】Python Selenium 自動化測試元素定位專業教程

1. 引言&#xff1a;元素定位在 Selenium 中的核心地位 元素定位是 Selenium 自動化測試的基礎&#xff0c;所有用戶交互操作&#xff08;如點擊、輸入、選擇&#xff09;都依賴于準確識別頁面元素。Selenium WebDriver 提供了多種定位策略&#xff0c;從簡單的 ID 定位到復雜…

通用代碼自用

多文件上傳public int save(Role role, RequestParam("nfile") MultipartFile nfile, HttpServletRequest request) {System.out.println(nfile.getOriginalFilename());String path request.getSession().getServletContext().getRealPath("/upload");Fi…

生成式AI如何顛覆我們的工作和生活

原問題&#xff1a; ?你覺得生成式AI未來會如何改變普通人的工作和生活&#xff1f;? 做過一個對比國外和國內工業化產品制造的簡單調研&#xff0c;類似一款定制化的臺燈或者語音音響&#xff0c;從零到原型實物&#xff0c; 美國至少需要20萬美刀&#xff0c;國內成本大概…

K8S、Docker安全漏洞靶場

1 介紹 一個脆弱基礎設施自動化構建框架,主要用于快速、自動化搭建從簡單到復雜的脆弱云原生靶機環境。 1.1 項目的緣起 在研究漏洞時,我們經常會發現“環境搭建”這一步驟本身就會占用大量的時間,與之相比,真正測試PoC、ExP的時間可能非常短。由于許多官方鏡像在國內的…

使用Nginx部署前后端分離項目

使用Nginx部署前后端分離項目&#xff1a;用戶中心系統實踐指南 部署前的關鍵準備 在正式部署前&#xff0c;務必確保前后端在生產環境能正常運行&#xff1a; 前端&#xff1a;測試所有API請求路徑和生產環境配置后端&#xff1a;驗證數據庫連接、環境變量和外部服務集成完整流…

當前就業形勢下,軟件測試工程師職業發展與自我提升的必要性

軟件測試行業正處于深刻變革期&#xff0c;2025年的市場已超越400億美元規模&#xff0c;預計2027年將增長7% 。在這個技術驅動、效率至上的時代&#xff0c;測試工程師若想保持競爭力&#xff0c;必須主動擁抱變革&#xff0c;系統性提升技能。通過深入分析行業現狀與人才需求…

java 之 繼承

一、繼承 1.1 、什么是繼承&#xff1f; 繼承就是把所有的類的公共部分&#xff08;相同的成員&#xff09;提取出來&#xff0c;放到一個類中繼承需要使用 extends 關鍵字 public class Animal{ public String name&#xff1b; } public class Dog extends Animal{}Dog 是 An…

強化應急通信生命線:遨游三防平板、衛星電話破局極端災害救援

暴雨傾盆&#xff0c;山洪咆哮&#xff0c;城市陷入內澇。今年進入汛期以來&#xff0c;我國廣東、福建、河南、陜西、京津冀等地相繼遭遇暴雨、洪澇、山洪等災害&#xff0c;道路損毀、基站斷網、電力中斷等次生問題為應急響應帶來嚴峻挑戰。如何保障極端場景下的通信暢通&…

【Linux系統】進程間通信:命名管道

1. 匿名管道的限制匿名管道存在以下核心限制&#xff1a;僅限親緣關系進程&#xff1a;只能用于父子進程等有血緣關系的進程間通信&#xff08;如通過 fork() 創建的子進程&#xff09;。單向通信&#xff1a;數據只能單向流動&#xff08;一端寫&#xff0c;另一端讀&#xff…

Python Day24 多線程編程:核心機制、同步方法與實踐案例

一、線程事件對象&#xff08;threading.Event&#xff09;threading.Event 用于實現線程間的通信&#xff0c;可讓一個線程通知其他線程終止任務&#xff0c;核心是通過 “事件觸發” 機制協調線程行為。核心方法&#xff1a;創建事件對象&#xff1a;event threading.Event(…

007 前端( JavaScript HTML DOM+Echarts)

一.html dom運用查找html元素的三種方式通過 id 找到 HTML 元素通過標簽名找到 HTML 元素通過類名找到 HTML 元素1.通過 id 找到 HTML 元素<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>msf的網頁</title> <…

實習文檔背誦

實習內容:1.定時任務與數據補全:基于 XXL-JOB 實現分布式定時任務調度&#xff0c;補全近半年歷史操作日志數據&#xff0c;有效解決因網絡異常導致的數據缺失問題。業務場景&#xff1b;集團的4a日志半年內沒有同步&#xff0c;這邊需要把日志數據同步到集團上首先先評估每天的…

分布式CAP定理

CAP 定理在一個分布式系統中&#xff0c;以下三個特性不可能同時完全滿足&#xff0c;最多只能滿足其中兩個&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有節點在同一時間看到的數據是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:現代化 PHP 應用的權限管理引擎

在當今復雜的Web應用中&#xff0c;精細化的權限管理是保障系統安全的關鍵環節。PHP-Casbin 作為Casbin生態的PHP實現&#xff0c;憑借其靈活的模型支持和強大的擴展能力&#xff0c;已成為PHP開發者實現訪問控制的首選工具。 超越傳統權限模型 PHP-Casbin 基于PERM&#xff…

FastDeploy2.0:環境變量的說明

一、執行# 設置日志目錄 export FD_LOG_DIR/workspace/models/log# 指定使用的 GPU 設備 export CUDA_VISIBLE_DEVICES0,1,2,3# 創建日志目錄&#xff08;如果不存在&#xff09; mkdir -p "$FD_LOG_DIR"# 定義日志文件路徑 LOG_FILE"$FD_LOG_DIR/fastdeploy_se…