自定義雙向繫結框架-只需一個註解,簡單實用
前言
本框架主要功能是實現了控制元件的雙向繫結功能,只需要對控制元件加個註解即可,簡化了配置,資料的改變能同步顯示到介面,介面UI資料的變化能同步到資料模型裡。
技術要點介紹
本框架用的技術有:
1、註解,BindView、OnClick
2、註解處理器annotationProcessor,點選檢視詳細講解
3、javapoet生成檔案,根據註解生成java檔案,程式碼生成了findViewById 、事件監聽、資料模型的監聽以及介面UI的變化等。點選檢視詳細使用講解
4、AppCompatDelegate 對TextView、EditText做了全域性替換。本方案可以用ASM插樁替換實現,逼格更高一點。
5、效能消耗忽略不計,框架上的一些程式碼效能邏輯開銷在編譯時已經處理過了,所以在執行時消耗基本忽略不計。
使用說明
1、初始化:
protected void onCreate(Bundle savedInstanceState) {
//本句程式碼在super.onCreate(savedInstanceState)之前
((MainActivity$$Injector)BindWay.getInstance().getInjector(this)).init(this);
super.onCreate(savedInstanceState);
setContentView(vdb.getRoot());
//本句程式碼在setContentView之後
injector = ((MainActivity$$Injector) BindWay.getInstance().bind(this));
}
MainActivity$$Injector為生成的java檔案,命名規則為當前Activity的名字拼接上$$Injector字串
2、使用註解
@BindView(value = R.id.metlis, key = "dataet")
EditText metlis;
@BindView(value = R.id.mtvlis, key = "dataTv")
TextView mtvlis;
@BindView(value = R.id.mview, key = "dataView")
MView mview;
@BindView(value = R.id.mrg, key = "rbValue")
RadioGroup mrg;
value 是控制元件的id,key是資料對應的欄位名
基礎控制元件只對TextView、EditText、RadioGroup做了支援,自定義的繼承了TextView、EditText、RadioGroup這3個的元件也支援,其他的元件可自行補充。
對於自定義的控制元件如MView,只支援內部佈局為xml格式的,不支援程式碼生成的 如new TextView(content),因為AppCompatDelegate 只能對xml佈局裡的控制元件進行替換。
自定義的控制元件需要對內部的TextView或者EditText加上tag,tag的格式為:"BTag:"+ BindView對應的key值,用於標記監聽的控制元件。
如:android:tag="BTag:dataView"
3、設定資料
injector.setData(key, value);
如:
injector.setData("dataView", "123");
4、獲取資料
返回key對應的資料
injector.getData(key)
返回整個資料結構Map
injector.getData()
在用vue開發APP的時候覺得vue的雙向繫結太爽了,就看了下Vue2和vue3 的原始碼,想自己實現一個類似的框架。
google官方出品的DataBinding,實在是太難用,所以忙裡偷閒大概花了3天左右的時間,終於把由來已久的想法實現了,初始化之後只需一個註解即可實現雙向繫結,自己用了下 簡直不要太好用,有時間後續其他控制元件也會逐漸補充,kotlin版本也會補充,歡迎大神指點,輕點噴。
關注我獲取更多知識或者投稿
- 【建議收藏】17個XML佈局小技巧
- Kotlin擴充套件方法進化之Context Receiver
- 網路請求元件封裝
- Flutter 繪製探索 | 箭頭端點的設計
- 在網頁上除錯手機上的APP
- Android應用安全解決方案
- Android應用安全開發之元件安全淺談
- Android 元件化架構設計從原理到實戰
- 涉作業系統技術領域,華為公開安卓應用程式遷移相關專利
- 避坑!!webview如何載入pdf ?
- Hook AMS APT實現集中式登入框架
- Retrofit是如何支援協程的
- 自定義雙向繫結框架-只需一個註解,簡單實用
- Android 10、11 儲存完全適配
- Java註解和註解解析器深耕,架構師必會
- 寫個更牛逼的Transform | Plugin 進階教程
- Android 騰訊 Matrix 原理分析(一):Matrix 概覽
- ART視角 | 如何自動回收native記憶體
- Android Gradle 多渠道打包
- Iterator 這些點你GET到了嗎?