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

 

转载于:https://my.oschina.net/u/1991343/blog/711123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值