码迷,mamicode.com
首页 > 移动开发 > 详细

Android MVVM简单配置--data Binding Library

时间:2016-07-13 15:32:15      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:

MVVM:Model-代表你的基本业务逻辑    View-显示的内容    ViewModel--将Model 和 View联系起来的对象

想要使用这种模式开发android程序可以使用Google提供的一种方式 data Binding Library
最低要求:API level7  Gradle 15.0
在android6.0的API中如图:
技术分享

第一步:在build.gradle(Module:app)中添加dataBinding,然后点击右上角的同步
  1. android {
  2. dataBinding{
  3. enabled=true;
  4. }
启用dataBinding

第二步:创建一个JAVA BEAN对象  本例以User(userName,password)对象为例
  1. public class User {
  2. public String userName;
  3. public String password;
  4. }
修饰符是public  不需要getter,setter方法

再创建一个Event对象  UserEvent.java
这样就可以将user对页面上的控件的值进行对应,修改控件的值会自己修改user对象的值,反之亦然
  1. public class UserEvent {
  2. private User user;
  3. //构造函数,将user传进来
  4. public UserEvent(User user) {
  5. this.user = user;
  6. }
  7. //对userName的监听
  8. public TextWatcher userNameWatcher = new TextWatcher() {
  9. @Override
  10. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  11. }
  12. @Override
  13. public void onTextChanged(CharSequence s, int start, int before, int count) {
  14. }
  15. @Override
  16. public void afterTextChanged(Editable s) {
  17. //将改变后的值给user对象
  18. user.userName = s.toString();
  19. }
  20. };
  21. //对password的监听
  22. public TextWatcher passwordWatcher = new TextWatcher() {
  23. @Override
  24. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  25. }
  26. @Override
  27. public void onTextChanged(CharSequence s, int start, int before, int count) {
  28. }
  29. @Override
  30. public void afterTextChanged(Editable s) {
  31. //将改变后的值给user对象
  32. user.password=s.toString();
  33. }
  34. };
  35. }
创建一个事件的监听对象MyHandler.java
  1. public class MyHandler {
  2. private User user;
  3. private Activity context;
  4. private ProgressDialog pd;
  5. //构造传参
  6. public MyHandler(User user,Activity context,ProgressDialog pd){
  7. this.user=user;
  8. this.context=context;
  9. this.pd=pd;
  10. }
  11. //登录事件
  12. public void onClickLoginUser(View v){
  13. if(TextUtils.isEmpty(user.userName) || TextUtils.isEmpty(user.password)){
  14. showToast("用户名或密码为空");
  15. }else{
  16. pd.show();
  17. new Thread(new Runnable() {
  18. @Override
  19. public void run() {
  20. //判断是否登录成功
  21. UserLoginNet net=new UserLoginNet();
  22. if(net.sendUserInfo(user)){
  23. showToast("欢迎回来:"+user.userName);
  24. }else{
  25. showToast("用户名或密码错误");
  26. }
  27. }
  28. }).start();
  29. }
  30. }
  31. private void showToast(final String content){
  32. context.runOnUiThread(new Runnable() {
  33. @Override
  34. public void run() {
  35. Toast.makeText(context,content,Toast.LENGTH_SHORT).show();
  36. pd.dismiss();
  37. }
  38. });
  39. }
  40. }


第三步:在布局文件最外层添加
  1. <layout xmlns:android="http://schemas.android.com/apk/res/android">
  2. <data>
  3. <variable
  4. name="event"
  5. type="com.example.yangzhi.mvvm.UserEvent"></variable>
  6. <variable
  7. name="handler"
  8. type="com.example.yangzhi.mvvm.MyHandler"></variable>
  9. </data>
  10. </layout>
将原布局文件的xmlns:android="http://schemas.android.com/apk/res/android"
放到现在的<layout>中
然后在控件的属性中添加: addTextChangedListener需要自己输入,我试了一下没有提示,也不需要android:text属性
  1. addTextChangedListener="@{event.userNameWatcher}"

整体代码
  1. <EditText
  2. addTextChangedListener="@{event.userNameWatcher}"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:hint="请输入用户名" />
  6. <EditText
  7. addTextChangedListener="@{event.passwordWatcher}"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:hint="请输入密码" />
  11. <Button
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:onClick="@{handler.onClickLoginUser}"
  15. android:text="登录" />
button的设置点击事件得注意一下,可别忘了
其它布局不变

第四步:MainActivity.java的onCreate方法中的配置
  1. ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
  2. //这个就不再需要
  3. //setContentView(R.layout.activity_main);
  4. user = new User();
  5. UserEvent event = new UserEvent(user);
  6. binding.setEvent(event);
  7. ProgressDialog pd=new ProgressDialog(this);
  8. MyHandler myHandler=new MyHandler(user,this,pd);
  9. binding.setHandler(myHandler);

整体代码,其实就上述代码:
  1. public class MainActivity extends AppCompatActivity {
  2. private User user;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
  7. //这个就不再需要
  8. //setContentView(R.layout.activity_main);
  9. user = new User();
  10. UserEvent event = new UserEvent(user);
  11. binding.setEvent(event);
  12. ProgressDialog pd=new ProgressDialog(this);
  13. MyHandler myHandler=new MyHandler(user,this,pd);
  14. binding.setHandler(myHandler);
  15. }
  16. }
整个activity的代码就上面那一点,其它的操作都放到其它文件中去了,不管是与控件相关的还是联网操作的都在其它文件
















Android MVVM简单配置--data Binding Library

标签:

原文地址:http://www.cnblogs.com/YoungZhi/p/5666815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!