DataBinding基本功能使用笔记
2017-06-26 14:20
363 查看
DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个关键工具。
基本用法
1 Gradle启用DataBinding
2 创建viewmodel包,包下创建一个UserViewModel,这里实现了双向绑定,需要注意set方法加notifyPropertyChanged(),get方法加@Bindable注解;
2 在需要绑定的xml中,引用这个ViewMode,其如在activity_main.xml中绑定:
3 在mainActitiy中,DataBindingh会根据activity_main.xml的名字自动生成一个ActivityMainBinding的类,此时需要将setContentView( R.layout.activity_main)换成ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
基本用法
1 Gradle启用DataBinding
Android{ …. databinding{ enabeled true } }
2 创建viewmodel包,包下创建一个UserViewModel,这里实现了双向绑定,需要注意set方法加notifyPropertyChanged(),get方法加@Bindable注解;
import android.databinding.BaseObservable; import android.databinding.Bindable; import com.android.databinding.library.baseAdapters.BR; /** * Created by chentanrong on 2017/3/22. */ public class UserViewModel extends BaseObservable{ private boolean gender;//男--true 女--false private String username; private String password; public UserViewModel(boolean gender, String username, String password) { this.gender = gender; this.username = username; this.password = password; } @Bindable public boolean isGender() { return gender; } public void setGender(boolean gender) { this.gender = gender; notifyPropertyChanged(BR.gender); } @Bindable public String getUs 4000 ername() { return username; } public void setUsername(String username) { this.username = username; notifyPropertyChanged(BR.password); } @Bindable public String getPassword() { return password; } public void setPassword(String password) { this.password = password; notifyPropertyChanged(BR.password); } @Override public String toString() { return "UserViewModel{" + "gender=" + gender + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
2 在需要绑定的xml中,引用这个ViewMode,其如在activity_main.xml中绑定:
<?xml version="1.0" encoding="utf-8"?> <layout> <data> <variable name="userViewModel" type="com.yulintu.databind.viewmodel.UserViewModel" /> </data> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.yulintu.databind.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@={userViewModel.username}" />//加“=”才能双向绑定 <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@={userViewModel.password}" /> <RadioGroup android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <RadioButton android:id="@+id/radioButtonM" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="@={userViewModel.gender}" android:text="男" /> <RadioButton android:id="@+id/radioButtonF" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="@={!userViewModel.gender}" android:text="女" /> </RadioGroup> <Button android:id="@+id/buttonRegister" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="注册" /> </LinearLayout> </layout>
3 在mainActitiy中,DataBindingh会根据activity_main.xml的名字自动生成一个ActivityMainBinding的类,此时需要将setContentView( R.layout.activity_main)换成ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; private UserViewModel userViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); binding= DataBindingUtil.setContentView(this,R.layout.activity_main); userViewModel =new UserViewModel(true,"chentanrong","123454"); //当viewModel中的值发生改变时的回调 Observable.OnPropertyChangedCallback onPropertyChangedCallback=new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable observable, int i) { if(i==BR.gender&&observable instanceof UserViewModel ){ Toast.makeText(getApplicationContext(),((UserViewModel) observable).isGender()?"男":"女", Toast.LENGTH_LONG).show(); } if(i==BR.username&&observable instanceof UserViewModel ){ Toast.makeText(getApplicationContext(),((UserViewModel) observable).getUsername(), Toast.LENGTH_LONG).show(); } if(i==BR.password&&observable instanceof UserViewModel ){ Toast.makeText(getApplicationContext(),((UserViewModel) observable).getPassword(), Toast.LENGTH_LONG).show(); } } }; userViewModel.addOnPropertyChangedCallback(onPropertyChangedCallback); //界面点击事件的回调 binding.buttonRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), userViewModel.toString(), Toast.LENGTH_LONG).show(); } }); binding.setUserViewModel(userViewModel); } }
相关文章推荐
- DataBinding的基本使用
- DataBinding的基本使用(二)
- DataBinding基本使用(4)
- DataBinding使用总结-基础篇(配置及基本使用)
- DataBinding基本使用
- Android Data Binding使用笔记
- DataBinding的基本使用(五)
- 家庭媒体中心解决方案(三、 群晖系列nas基本功能使用指南篇1)
- SpringMVC学习笔记(二): 日常使用功能
- 苹果审核拒绝理由:订阅商品必须在不同机器可共享,facebook账号需提供基本使用功能
- 一步一步学SpringDataJpa——JpaRepository基本功能(Curd)
- Spring学习笔记(14)----使用CGLIB实现AOP功能
- WPF and Silverlight 学习笔记(二十六):基本图形使用(1)
- php学习笔记之mb_strstr的基本使用
- 使用Solr Data Import的full-import | delta-import功能
- ubuntu16.04LTS基本操作和使用笔记
- springboot基本使用笔记----添加jsp支持及打包部署
- [Step By Step]在SAP Business Objects Data Services中使用Case Transform数据分离功能区分数据并分别导入到SAP HANA中(Case Transform)
- Java8新特性Lambda表达式的基本使用(常用功能)
- MongoCola使用教程 1 - MongoDB的基本操作和聚合功能