AndroidX的意思是android extension libraries, 也就是安卓扩展包
AndroidX其实是Jetpack类库的命名空间
(190条消息) AndroidX初识_Neda Wang的博客-CSDN博客
https://blog.csdn.net/weixin_38261570/article/details/111500044
viewmodel
Android 面试总结 - ViewModel - 知乎 (zhihu.com)
ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据,就是根据activity/fragment的生命周期去存储和管理数据的,ViewModel是在Activity真正结束时才被清理掉。
livedate也是其中一种数据
看了下源码 viewmodel内部其实就是一个hashmap的 操作 存储、读取和删除
管理ui的data
每个activity和frgment 对应一个viewmodel 里面包了liveData 双向绑定一般用其子类
MutableLiveData
livedata:数据管理类
livedata 本身是没有生命周期感知的,必须放在viewmodel里面才有
livedate 房activity或者fragment 是随宿主的生命周期销毁重建的,无法保证activity重建还能保证数据 而 viewmodel 生命周期是长于activity的。放在viewmodel里面可以保证
Android Jetpack系列(五):LiveData(使用篇) - 知乎 (zhihu.com)
(195条消息) LiveData的使用及详解_求其沙沙的博客-CSDN博客
1. LiveData简单使用
本篇文章代码实现部分主要使用Java进行讲解。
LiveData主要方便用于数据的观察,进行UI更新或者业务处理等操作。
如下为LiveData的简单代码实现
// 创建一个MutableLiveData对象,这个使用LiveData的子类MutableLiveData
// MutableLiveData暴露了postValue和setValue方法用于通知数据变化
MutableLiveData<Object> liveData = new MutableLiveData<>();
// 在UI线程中调用该方法通知数据变更
liveData.setValue(object);
// 在子线程中调用该方法通知数据变更,该方法中切换到UI线程后调用setValue方法
liveData.postValue(object);
// 监听数据变化,进行界面更新等操作,该方法一般放在Activity onCreate方法中调用,只注册一次
liveData.observe(this, new Observer<Object>() {
@Override
public void onChanged(Object o) {
// TODO 此处进行o对象的数据与界面进行绑定刷新
}
});
————————————————
版权声明:本文为CSDN博主「求其沙沙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36224961/article/details/126227295
livedata + databinding 实现双向绑定
(195条消息) ViewModel 的基本用法_Errol_King的博客-CSDN博客_viewmodel使用
DataBinding
首先是布局和activity 绑定
在对应module的build.gradle中,进行如下配置:
android {
...
dataBinding {
enabled true
}
}
这样就配置完毕了。要注意的一点是,如果依赖的库中使用了data binding,那么app module中也需要进行配置
————————————————
版权声明:本文为CSDN博主「mhq42978」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013400743/article/details/52216350
新建一个acticvity 比如 TestActivity
新建一个xml 比如layout_test.xml
android studio 会自动生成一个LayoutTestBinding类
怎么把LayoutTestBinding和TestActivity关联
1.
import com.loong.mvvmexmple.databinding.LayoutTestBinding;import java.util.concurrent.atomic.AtomicInteger;public class TestActivity extends AppCompatActivity {private LayoutTestBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//布局与activity绑定方法1 DataBindingUtil需要alt+enter 导入包LayoutTestBinding binding = DataBindingUtil.setContentView(this, R.layout.layout_test);//布局与activity绑定方法2 LayoutTestBinding 是databinding根据布局文件 layout_test.xml 自动生成的
// binding = LayoutTestBinding.inflate(getLayoutInflater());
// setContentView(binding.getRoot());AtomicInteger count = new AtomicInteger();binding.tv.setOnClickListener(view -> {count.getAndIncrement();binding.tv.setText("点击次数" + count);Toast.makeText(TestActivity.this, "点击" + count, Toast.LENGTH_SHORT).show();});}
}
此时无论布局文件是否被layout 包裹都可以展示
public class FirstFragment extends Fragment {private FragmentFirstBinding binding;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {binding = FragmentFirstBinding.inflate(inflater, container, false);return binding.getRoot();}
具体细节过程参考
DataBinding基本使用 - 简书 (jianshu.com)