当前位置: 首页 > news >正文

建设厂招工信息网站人员优化方案怎么写

建设厂招工信息网站,人员优化方案怎么写,30岁零基础学室内设计,婚纱网站目录优化MVVM MVVM是什么?MVVM实现前提ModelViewModelView MVVM是什么? Model-View-ViewMode架构,可看作MVP改进版,将此前Presenter的逻辑操作交给ViewMode中的Binder去处理 Mode:封装数据存储及相关操作逻辑,与MV…

MVVM

  • MVVM是什么?
  • MVVM实现
    • 前提
    • Model
    • ViewModel
    • View

MVVM是什么?

Model-View-ViewMode架构,可看作MVP改进版,将此前Presenter的逻辑操作交给ViewMode中的Binder去处理

在这里插入图片描述

  • Mode:封装数据存储及相关操作逻辑,与MVC/MVP不同的是会提供一系列实体类与UI绑定,ViewModel修改这些数据后将数据变化告诉View
  • View:处理界面逻辑但不参与业务逻辑,显示ViewModel提供的数据
  • ViewModel:视图模型与视图状态的合称,为View提供一个可供显示的数据模型并收集、处理这些数据,内部的Binder用于双向绑定,还可包含多个Child ViewModel

MVVM实现

前提

在build.gradle中android节点添加如下代码(最低SDK版本为API7,Gradle版本为1.5.0-alpha1)

dataBinding{enabled = true
}

Model

创建数据实体类LoginInfo

  • 继承BaseObservable
  • getXXX()方法通过@Bindable注解表示该方法所返回的数据被修改时会更新UI
  • setXXX()方法调用notifyPropertyChanged()告诉DataBinding该字段被更改
public class LoginInfo extends BaseObservable {private String mUser;private String mPassword;public LoginInfo(String user, String password) {mUser = user;mPassword = password;}@Bindablepublic String getUser() {return mUser;}public void setUser(String user) {mUser = user;notifyPropertyChanged(BR.user);}@Bindablepublic String getPassword() {return mPassword;}public void setPassword(String password) {mPassword = password;notifyPropertyChanged(BR.password);}
}

ViewModel

LoginModel封装维护LoginInfo、点击事件、文本改变事件

public class LoginModel {private static final String DEF_USER = "song";private static final String DEF_PASSWORD = "123";public LoginInfo mInfo;private OnLoginListener mListener;public LoginModel(OnLoginListener listener) {mListener = listener;mInfo = new LoginInfo("", "");}public TextWatcher getUserTextWatcher() {return 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) {mInfo.setUser(s.toString());}};}public TextWatcher getPasswordTextWatcher() {return 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) {mInfo.setPassword(s.toString());}};}public interface OnLoginListener {void onLoginSuccess();void onLoginFail();}public void onLoginClick(View view) {if (mInfo.getUser().equals(DEF_USER) && mInfo.getPassword().equals(DEF_PASSWORD)) {mListener.onLoginSuccess();} else {mListener.onLoginFail();}}
}

View

xml文件根节点变为layout,布局分为

  • 数据部分:声明所使用到的数据实体类以及构造该对象时的引用名
  • UI部分:常规控件,可直接使用数据实体类对象中的字段、方法
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="model"type="com.demo.demo0.LoginModel" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:addTextChangedListener="@{model.getUserTextWatcher}"android:hint="User"android:text="@{model.mInfo.getUser}" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:addTextChangedListener="@{model.getPasswordTextWatcher}"android:hint="Password"android:text="@{model.mInfo.getPassword}" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{model.onLoginClick}"android:text="Login" /></LinearLayout></layout>

MainActivity开启线程3秒后修改数据会显示在UI

  • 通过DataBindingUtil.setContentView设置布局,布局名字为R.layout.ab_cd,则对应类为AbCdBinding,为其设置Model
public class MainActivity extends AppCompatActivity implements LoginModel.OnLoginListener {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);LoginModel model = new LoginModel(this);binding.setModel(model);new Thread(new Runnable() {@Overridepublic void run() {SystemClock.sleep(3000);model.mInfo.setUser("New User");model.mInfo.setPassword("New Password");}}).start();}@Overridepublic void onLoginSuccess() {Log.d(TAG, "onLoginSuccess: ");}@Overridepublic void onLoginFail() {Log.d(TAG, "onLoginFail: ");}
}
http://www.mmbaike.com/news/30971.html

相关文章:

  • 湛江有帮公司做网站深圳市文化广电旅游体育局
  • 自贡哪家做网站的好如何制作网页链接教程
  • 微信商城网站如何做可以看封禁网站的浏览器
  • 网站建设平台招商外贸推广平台有哪几个
  • 云南通耀建设工程有限公司网站公司要做seo
  • 重庆本地建站百度官网首页登陆
  • wordpress搭建企业网站网店运营在哪里学比较好些
  • html业务网站源码aso优化哪家好
  • jsp 企业建站营销推广seo
  • 徐州seo外包平台宁波seo费用
  • 淘宝做网站建设靠谱吗网络推广哪个平台好
  • 南宁百度网站公司吗seo简单优化操作步骤
  • 外网访问不了内网建设的网站企业营销策划方案
  • wordpress 中英文网站竞价广告是怎么推广的
  • 哪个网站做平行进口车论文收录网站排名
  • 网站投放广告怎么做北京网络营销公司
  • 平面设计考研科目seo优化托管
  • 网站开发技能证书网站推广优化c重庆
  • 网站开发知识产权归属在线客服
  • 购物网站建设思维导图百度域名提交收录网址
  • 在哪里可以学到做网站网站的推广
  • 做web网站如何做选择日历微信朋友圈广告怎么推广
  • 米各庄有做网站的吗今日中国新闻
  • 制作网站首页分为哪几部分网络营销策划书模板
  • 网站适合用angular做吗seo性能优化
  • wordpress域名二级目录如何跳转谷歌seo课程
  • 便宜网站建设多少钱seo如何优化排名
  • 网站建设的源代码谷歌推广哪家公司好
  • 网站建设没有业务怎么办市场调研分析报告怎么写
  • 做网站重要标签海底捞口碑营销案例