在Android Studio 2.1 Preview 3之后,官方開始支持雙向綁定了。
創新互聯公司專注于辰溪企業網站建設,響應式網站,成都做商城網站。辰溪網站建設公司,為辰溪等地區提供建站服務。全流程按需設計,專業設計,全程項目跟蹤,創新互聯公司專業和態度為您提供的服務
可惜目前Google并沒有在Data Binding指南里面加入這個教程,并且在整個互聯網之中只有 這篇文章 介紹了如何使用反向綁定。
在閱讀一下文章之前,我假設你已經知道如何正向綁定。
在正向綁定中,我們在Layout里面的綁定表達式是這樣的:
當user.name的數據改動時,我們的TextView都會同步改變文字。
現在假設一種情況,當你更換成EditText時,如果你的用戶名User.name已經綁定到 EditText 中,當用戶輸入文字的時候,你原來的user.name數據并沒有同步改動,因此我們需要修改成:
看出微小的差別了嗎?對,就是"@{}"改成了"@={}",是不是很簡單?
同樣你也可以在別的View上引用屬性:
當CheckBox的狀態發生改變的時候,ImageView也會同時發生改變。在復雜情況下,這個特性沒什么卵用,因為邏輯部分我們是不建議寫在XML中。
開啟雙向綁定,需要在項目的build.gradle中設置:
同樣,你需要在你Module的build.gradle中設置:
我們剛才的例子里面只顯示了系統自帶的應用,那么如果是自定義控件,或者是我們更細顆粒度的 Observable 呢?等下就揭曉如何自定義自己的雙向綁定,我們來看看目前Android支持的控件:
設想一下我們使用了下拉刷新 SwipeRefreshLayout 控件,這個時候我們希望在加載數據的時候能控制refreshing的狀態,所以我們加入了 ObservableBoolean 的變量swipeRefreshViewRefreshing來正向綁定數據,并且能夠在用戶手動下拉刷新的時候同步更新swipeRefreshViewRefreshing數據:
接下來我們需要告訴框架,我們需要將 SwipeRefreshLayout 的isRefreshing的值反向綁定到 swipeRefreshViewRefreshing :
這是一種簡單的定義,其中event和method都不是必須的,因為系統會自動生成,寫出來是為了更好地了解如何綁定的,可以參考官方文檔 InverseBindingMethod 。
當然你也可以使用另外一種寫法,并且如果你的值并不是直接對應 Observable 的值的時候,就可以在這里進行轉換:
上面的event同樣也不是必須的。以上的定義都是為了讓我們能夠在布局文件中使用"@={}"這個雙向綁定的特性。接下來你需要告訴框架如何處理refreshingAttrChanged事件,就像處理一般的監聽事件一樣:
一般情況下,我們都需要設置正常的OnRefreshListener,所以我們可以合并寫成:
現在我們終于可以使用雙向綁定的技術啦。但是要注意,需要設置 requireAll = false ,否則系統將識別不了refreshingAttrChanged屬性,前文提到的文章例子里并沒有設置這個。
在ViewModel中,我們的數據是這樣的:
在布局文件中是這樣設置的:
最后我們還有一個小問題,就是雙向綁定有可能會出現死循環,因為當你通過Listener反向設置數據時,數據也會再次發送事件給View。所以我們需要在設置一下避免死循環:
這樣就沒問題啦。
CoAP(Constrained Application Protocol)也叫做“受限應用協議”是一種在物聯網世界的類web協議,它的詳細規范定義在 RFC 7252。參考如下兩篇博客學習更多關于CoAP信息。
CoAP簡介
CoAP協議使用
Andlink是中國移動提出的一套設備接入和管理的協議,實現方式復雜,在此不做過多描述,該協議可進行設備與網關之間通信,從而實現設備綁定和管控。Andlink采用CoAP或MQTT作為通信協議。
1、APP進入網關綁定頁面,確認wifi是否開啟(如果未開啟,提示用戶開啟wifi并綁定到與網關相同wifi下
2、進入網關綁定頁后,APP在局域網中每隔1秒發送/qlink/searchdevice的廣播,同時調用全屋平臺startBind接口
3、收到網關反饋,確認產品id與網關一致后,向網關發送配網信息,注意這里"CGW"地址隨開發測試環境不同改變
4、網關入網成功后,會發送/qlink/success的廣播消息
5、網關綁定成功后,會發送/qlink/regist的廣播消息,包含設備ID
6、后臺給APP推送一條網關綁定成功的消息,接收到該消息后,跳出綁定成功界面
最近封裝了幾個View,都和生命周期有關,比如BannerView、和我們公司的ARView,那他們的生命周期怎么綁定呢?剛開始我是直接告訴別人,你自己在哪個activity使用的,就在哪個activity綁定,結果使用的時候被甲方對接人員打回來說這是低級處理方式,wtm這暴脾氣,誰tm低級了,但是沒辦法別人是甲方只能聽他的,直接將生命周期的綁定綁在view里面。下面就介紹幾個常用的生命周期綁定。
Application.ActivityLifecycleCallbacks是Android自帶的生命周期綁定接口,他有注冊與解除方法,當我們進入一個activity的時候就可以注冊綁定他了。
簡單demo。比如我們要講一個自定義的View綁定生命周期。
1、先定義一個Application.ActivityLifecycleCallbacks的實現類,為什么這樣呢?是因為用戶可以要什么選什么,就不用被迫每次都實現全部。
2、定義一個測試用的view,在構造方法綁定注冊生命周期,
((Activity)context).getApplication().registerActivityLifecycleCallbacks(lifecycleCallbacks);這句話是注冊生命周期當然他也對應了一個((Activity)context).getApplication().unregisterActivityLifecycleCallbacks(lifecycleCallbacks);解綁方法。
在ActivityLifecycleCallbacks 的實現中判斷了返回的activity是否為這個view所在的acrivity因為很多activity都會走這個方法,如果不做判斷,其他activity的生命周期也會影響這個view,所以加判斷是個好習慣。
這次我們模擬一個普通類綁定生命周期這個類名叫Test,哈哈,是不是很高大上?但是寫Test類之前先定義我們要綁定的生命周期接口LifecycleListener
這里我們監聽下常用的onResume、onPause、onDestroy。
然后是Test類
然后寫LifecycleDetector,嘗試將test類的實例與fragment綁定
定義沒有布局的fragment實例
然后保存fragment和Requestmanager關系
還有一個遺漏的接口
上面這些完成后,就可以使用了,我們隨便搞個activity試試名字就叫LeftDemoActivity非常好聽了有沒有!
當你運行起來的時候,就是成功的時候。
有個東西忘啦,getSnapshot是做保存的,直接把源碼拿過來的。
還有其他的方法我沒試過,但是這樣的生命周期綁定可以解決挺多bug的,玩過嗶哩嗶哩的應該會遇到他們的一個bug,就是進入一個視頻播放頁,然后還沒加載完成就息屏,他這個時候異步回調回來視頻數據了就會在息屏或鎖屏界面播出音頻來,這是典型的生命周期bug,我遇到過幾次了,如果加入這個綁定輕松就能解決問題啦。
網頁題目:android綁定,android綁定手機
轉載來于:http://www.yijiale78.com/article42/dsgooec.html
成都網站建設公司_創新互聯,為您提供虛擬主機、軟件開發、外貿建站、ChatGPT、App設計、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯