Android JetPack DataBinding 将界面和数据进行绑定
程序员文章站
2022-03-13 21:25:31
...
DataBinding改写,将界面和数据进行绑定
LiveData观察就是通过setValue()
1.在bulid.gradle(Module:app)deafultConfig里加
dataBinding{
enabled true
}
2.将布局文件 Convert to data binding layout
转换后布局文件查看Text会多一对<data></data>标签
Activity.java文件中会多一个对象类型 xxx(布局文件名)Binding 如:ActivityMainBinding binding;
原来的setContentView(R.layout.activity_main);就不需要了
绑定布局文件
ActivityMainBinding binding;
binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
绑定ViewModel(数据)文件
MyViewModel myViewModel;
myViewModel=ViewModelProviders.of(this).get(MyViewModel.class);
控件什么的通过binding.id名访问
最后
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
3.数据和点击事件反向绑定
布局文件:
<data>
<variable
name="data"
type="com.example.databinding2.MyViewModel" />
</data>
<TextView
android:text="@{String.valueOf(data.number)}"
<Button
android:onClick="@{()->data.add()}"
观察就不需要了。
activity完整代码:
package com.example.databinding2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import com.example.databinding2.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel=ViewModelProviders.of(this).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
下一篇: 程序中如何开启关闭wifi服务