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的代码就上面那一点,其它的操做都放到其它文件中去了,无论是与控件相关的仍是联网操做的都在其它文件














相关文章
相关标签/搜索