[Android] liveData和viewBinding的使用

ViewModel:
官方解释:保存UI数据的类,会在配置变更(如手机屏幕的旋转)后继续存在。
view Model不应持有context,否则在Activity销毁后View Model仍然持有Activity的context,造成内存泄漏;可以继承AndroidViewModel,或者选择application context

liveData:
1.建立data类

public class Time {
    private MutableLiveData<Integer> seconds = new MutableLiveData<>();

    public MutableLiveData<Integer> getSeconds() {
        return seconds;
    }
}

2.继承View Model

public class TestViewModel extends ViewModel {
    private Time time;

    public TestViewModel(){
        time = new Time();
        // 修改liveData包装的数据,主线程用setValue,其他线程PostValue
        time.getSeconds().setValue(0);
    }

    public Time getLiveData(){
        return time;
    }
}

3.observe数据

private TestViewModel vm;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    vm = new TestViewModel();
    vm.getLiveData().getSeconds().observe(this, new Observer<Integer>() {
        @Override
        public void onChanged(Integer integer) {
            EditText ed = findViewById(R.id.ed);
            ed.setText(""+integer);
        }
    });

viewBinding:
1.build.gradle添加

buildFeatures {
    viewBinding true
}

根视图和所有有ID的视图都会根据xml文件名称,生成对应的Binding类
2. 在Activity中使用view Binding

ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);

如果找不到Binding类,可能是名字错了,顺序再调一下可能就对了
在Fragment中使用view Binding

 @Override
    public View onCreateView (LayoutInflater inflater,
                              ViewGroup container,
                              Bundle savedInstanceState) {
        ActivityMainBinding binding = ResultProfileBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        return view;
    }

由于fragment的生命周期更长,所以务必在destroy解除绑定

@Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值