MVVMhtml
首先在xml佈局文件中添加java
<data> <variable name="loginHandler" type="com.webtest.handler.LoginHandler"/> <variable name="loginInfo" type="com.webtest.model.LoginInfo" /> </data>
其中LoginInfo是咱們建的一個實體類用於操做數據,LoginHandler則做爲viewModel層進行業務的處理。android
在xml中須要綁定數據的地方添加綁定web
<EditText android:id="@+id/login_edit_verification" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="手機號" android:gravity="center" android:textColorHint="#7FFFFF" android:textColor="#FFFFFF" android:text="@={loginInfo.verification}"/>
注意"@={loginInfo.verification}"要有「=」,若是沒有隻能單向傳遞數據(從UI獲取數據,不能將數據同步更新到UI)有等號才能夠實現雙向綁定。app
在須要綁定事件的方添加佈局
<Button android:id="@+id/login_get_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/get_button" android:layout_marginTop="6dp" app:layout_constraintEnd_toEndOf="@+id/login_edit_phontno" app:layout_constraintTop_toBottomOf="@+id/login_edit_phontno" android:onClick="@{loginHandler.onClickGet}"/>
xml佈局文件裏須要作的事情就這麼多。而後寫一個javabean類來實現數據綁定this
public class LoginInfo extends BaseObservable { private String phoneno; private String verification; public LoginInfo(){ } public LoginInfo(String phoneno, String verification){ this.phoneno = phoneno; this.verification = verification; } @Bindable public String getPhoneno() { return phoneno; } public void setPhoneno(String phoneno) { this.phoneno = phoneno; notifyPropertyChanged(BR.phoneno); } @Bindable public String getVerification() { return verification; } public void setVerification(String verification) { this.verification = verification; notifyPropertyChanged(BR.verification); } }
注意:在get方法上添加註解@Bindable,在set方法中添加spa
notifyPropertyChanged(BR.verification);其中BR有兩個包,import導錯的話會報錯,報錯能夠試着換一個BR的包。
而後在Activity的oncreate()方法中添加雙向綁定
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login); binding.setLoginInfo(loginInfo);
就能夠實現雙向綁定了。
其中ActivityLoginBinding是根據R.layout.activity_login自動生成的,若是報錯能夠嘗試clean下或者重啓。最好是將activity_login考過去而後將下劃線去掉將首字母改爲大寫通常就會提示須要import的包了。
code
實現事件綁定則是建一個Hanler類,寫上事件的方法就能夠進行事件處理了
public void onClickGet(View view){ Toast.makeText(view.getContext(),"給你驗證碼",Toast.LENGTH_SHORT).show() }
就能夠實現事件綁定。
因爲咱們一般會在Handler類裏進行數據操做,而數據一般是從UI即Activity中獲取,因此要本身在Hanler類中寫個javabean的get和set方法
public LoginInfo getLoginInfo() { return loginInfo; } public void setLoginInfo(LoginInfo loginInfo) { this.loginInfo = loginInfo; } LoginInfo loginInfo;
而後在Activity中調用
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loginInfo = new LoginInfo(); LoginHandler loginHandler = new LoginHandler(); loginHandler.setLoginInfo(loginInfo); ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login); binding.setLoginHandler(loginHandler); binding.setLoginInfo(loginInfo); }
這樣就是Activity只作UI相關的設置等,全部的業務操做全在Handler類中進行。