Android MVVM快速开发框架(一)
进入到准备工作之中。。。。。。
1.启用databinding
在主工程app的build.gradle的android {}中加入:
android { dataBinding { enabled = true } compileSdkVersion 26
2 .配置AndroidManifest
添加基本权限:
android:name="android.permission.INTERNET" />android:name="android.permission.ACCESS_WIFI_STATE" />android:name="android.permission.READ_PHONE_STATE" />android:name="android.permission.ACCESS_NETWORK_STATE" />android:name="android.permission.READ_EXTERNAL_STORAGE" />android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
先创建一个实体类:
public class UserEntity {
private String username;
private String nickname;
private int age;
public UserEntity() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public UserEntity(String username, String nickname, int age) {
this.username = username;
this.nickname = nickname;
this.age = age;
}
}
再来看看布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
type="com.study.bin.androidframestudy.mvvm.bean.UserEntity"/>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.study.bin.androidframestudy.mvvm.view.MainActivity"
>
android:layout_height="wrap_content"
android:text="@{user.username}"/>
android:layout_height="wrap_content"
android:text="@{`姓名:`+user.nickname}"/>
android:layout_height="wrap_content"
android:background="@{user.age < 30 ? 0xFF0000FF:0xFFFF0000}"
android:text="@{String.valueOf(user.age)}"/>
在data中定义的variable节点,name属性表示变量的名称,type表示这个变量的类型,实例就是我们实体类的位置,当然,这里你也可以换这种方式:
<data> <import type="org.lenve.databinding1.UserEntity"/> <variable name="user" type="UserEntity"/> </data>
先使用import节点将UserEntity导入,然后直接使用即可。但是如果这样的话又会有另外一个问题,假如我有两个类都是UserEntity,这两个UserEntity分属于不同的包中,又该如何?看下面:
<data> <import type="org.lenve.databinding1.UserEntity" alias="Lenve"/> <variable name="user" type="Lenve"/> </data>
在import节点中还有一个属性叫做alias,这个属性表示我可以给该类取一个别名,我给UserEntity这个实体类取一个别名叫做Lenve,这样我就可以在variable节点中直接写Lenve了。
在布局文件中,TextView的text属性被我直接设置为了@{user.username},就可以是获取user的username值,
你也可以将它当做String使用,如@{姓名:
+user.nickname},
由于TextView的text属性时要字符串的,所以我们需要转型,如@{String.valueOf(user.age)},
获取根据条件进行属性该变,如@{user.age < 30 ? 0xFF0000FF:0xFFFF0000}
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MvvmLayoutBinding layoutBinding = DataBindingUtil.setContentView(this, R.layout.mvvm_layout); UserEntity user = new UserEntity(); user.setAge(34); user.setUsername("binzai"); user.setNickname("彬仔"); layoutBinding.setUser(user); }}
DataBindingUtil 在support-v4:24版本以上才有,
另外,不知道你测试的时候有木有发现MvvmLayoutBinding这个类居然没有,其实确实是没有这个类,那这个类在哪里呢?其实这个类名是就是根据这个Activity引用的这个布局文件生成出来的,这个类名就是省略了下划线的布局文件名。
完工。
更多相关文章
- android控件属性
- Android视图篇之一:Android常见基本布局
- android界面开发小结——android笔记---控件和布局
- android控件属性(中文)
- android相对布局中控件的常用属性
- android 中targetSdkVersion和与target属性的区别