MVVM适用于小型项目,比较吃硬件。
VIEW VIEWMODEL MODEL
gradle配置 dataBinding为true
view:
布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <!--此处定义该布局要定义的数据名字和类型--> <variable name="user" type="com.example.tongpeng.mvvm.bean.User" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{`用户名:`+user.name}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{`密码:`+user.password}" /> </LinearLayout>
</layout>
ViewModel
定义User类
/** * 1 、获取的方法上加@Bindable。 * 2、继承可以被观察的接口 * 3、设置的方法里增加更新方法 notifyPropertyChanged(BR.xxx) * 参数是id, 每个成员变量name、password都类似R文件里的layout */ public class User extends BaseObservable { private String name; private String password; public User(String name, String password) { this.name = name; this.password = password; } @Bindable public String getName() { return name; } public void setName(String name) { this.name = name; notifyPropertyChanged(BR.name); } @Bindable public String getPassword() { return password; } public void setPassword(String password) { this.password = password; notifyPropertyChanged(BR.password); } }
Activity:
需需先rebuild一下,生成类。
setContentView 改为 DataBindingUtil.setContentView(this, R.layout.activity_main);
public class MainActivity extends AppCompatActivity {
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
user = new User("tp", "123");
binding.setUser(user);
}
}
运行一下:
二、测试一下图片展示
view布局增加ImageView控件,自定义一个属性header,与viewModel里的header关系如下:
方法一定要是静态的static!!因为在源码生成的代码中,它会使用我这类名直接去“点”这个方法,来进行这个加载。
MainActivity:
User的构造方法中加入图片url。
测试一下: