Android MVVM簡單配置--data Binding Library

MVVM:Model-表明你的基本業務邏輯    View-顯示的內容    ViewModel--將Model 和 View聯繫起來的對象

想要使用這種模式開發android程序能夠使用Google提供的一種方式 data Binding Library
最低要求:API level7  Gradle 15.0
在android6.0的API中如圖:


第一步:在build.gradle(Module:app)中添加dataBinding,而後點擊右上角的同步
   
   
   
   
android { dataBinding{ enabled=true; }
啓用dataBinding

第二步:建立一個JAVA BEAN對象  本例以User(userName,password)對象爲例
   
   
   
   
public class User { public String userName; public String password;}
修飾符是public  不須要getter,setter方法

再建立一個Event對象   UserEvent.java
這樣就能夠將user對頁面上的控件的值進行對應,修改控件的值會本身修改user對象的值,反之亦然
   
   
   
   
public class UserEvent { private User user; //構造函數,將user傳進來 public UserEvent(User user) { this.user = user; } //對userName的監聽 public TextWatcher userNameWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { //將改變後的值給user對象 user.userName = s.toString(); } }; //對password的監聽 public TextWatcher passwordWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { //將改變後的值給user對象 user.password=s.toString(); } };}
建立一個事件的監聽對象 MyHandler.java
   
   
   
   
public class MyHandler { private User user; private Activity context; private ProgressDialog pd; //構造傳參 public MyHandler(User user,Activity context,ProgressDialog pd){ this.user=user; this.context=context; this.pd=pd; } //登陸事件 public void onClickLoginUser(View v){ if(TextUtils.isEmpty(user.userName) || TextUtils.isEmpty(user.password)){ showToast("用戶名或密碼爲空"); }else{ pd.show(); new Thread(new Runnable() { @Override public void run() { //判斷是否登陸成功 UserLoginNet net=new UserLoginNet(); if(net.sendUserInfo(user)){ showToast("歡迎回來:"+user.userName); }else{ showToast("用戶名或密碼錯誤"); } } }).start(); } } private void showToast(final String content){ context.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(context,content,Toast.LENGTH_SHORT).show(); pd.dismiss(); } }); }}


第三步:在佈局文件最外層添加
   
   
   
   
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="event" type="com.example.yangzhi.mvvm.UserEvent"></variable> <variable name="handler" type="com.example.yangzhi.mvvm.MyHandler"></variable> </data></layout>
將原佈局文件的 xmlns: android = "http://schemas.android.com/apk/res/android"
放到如今的<layout>中
而後在控件的屬性中添加: addTextChangedListener須要本身輸入,我試了一下沒有提示,也不須要android:text屬性
   
   
   
   
addTextChangedListener="@{event.userNameWatcher}"

總體代碼
    
    
    
    
<EditText addTextChangedListener="@{event.userNameWatcher}" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入用戶名" /> <EditText addTextChangedListener="@{event.passwordWatcher}" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入密碼" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@{handler.onClickLoginUser}" android:text="登陸" />
button的設置點擊事件得注意一下,可別忘了
其它佈局不變

第四步: MainActivity.java的 onCreate方法中的配置
   
   
   
   
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); //這個就再也不須要 //setContentView(R.layout.activity_main); user = new User(); UserEvent event = new UserEvent(user); binding.setEvent(event); ProgressDialog pd=new ProgressDialog(this); MyHandler myHandler=new MyHandler(user,this,pd); binding.setHandler(myHandler);

總體代碼,其實就上述代碼:
   
   
   
   
public class MainActivity extends AppCompatActivity { private User user; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); //這個就再也不須要 //setContentView(R.layout.activity_main); user = new User(); UserEvent event = new UserEvent(user); binding.setEvent(event); ProgressDialog pd=new ProgressDialog(this); MyHandler myHandler=new MyHandler(user,this,pd); binding.setHandler(myHandler); }}
整個activity的代碼就上面那一點,其它的操做都放到其它文件中去了,無論是與控件相關的仍是聯網操做的都在其它文件














相關文章
相關標籤/搜索