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() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {//将改变后的值给user对象user.userName = s.toString();}};//对password的监听public TextWatcher passwordWatcher = new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void run() {Toast.makeText(context,content,Toast.LENGTH_SHORT).show();pd.dismiss();}});}}
第三步:在布局文件最外层添加
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="event"type="com.example.yangzhi.mvvm.UserEvent"></variable><variablename="handler"type="com.example.yangzhi.mvvm.MyHandler"></variable></data></layout>
放到现在的<layout>中
然后在控件的属性中添加: addTextChangedListener需要自己输入,我试了一下没有提示,也不需要android:text属性
addTextChangedListener="@{event.userNameWatcher}"
整体代码
<EditTextaddTextChangedListener="@{event.userNameWatcher}"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名" /><EditTextaddTextChangedListener="@{event.passwordWatcher}"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入密码" /><Buttonandroid: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;@Overrideprotected 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的代码就上面那一点,其它的操作都放到其它文件中去了,不管是与控件相关的还是联网操作的都在其它文件
浙公网安备 33010602011771号