網(wǎng)站首頁 編程語言 正文
ViewModel
官方解釋:保存UI數(shù)據(jù)的類,會在配置變更(如手機屏幕的旋轉)后繼續(xù)存在。
view Model不應持有context,否則在Activity銷毀后View Model仍然持有Activity的context,造成內(nèi)存泄漏;可以繼承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包裝的數(shù)據(jù),主線程用setValue,其他線程PostValue
time.getSeconds().setValue(0);
}
public Time getLiveData(){
return time;
}
}
3.observe數(shù)據(jù)
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的視圖都會根據(jù)xml文件名稱,生成對應的Binding類
2. 在Activity中使用view Binding
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
如果找不到Binding類,可能是名字錯了,順序再調(diào)一下可能就對了
在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;
}
原文鏈接:https://blog.csdn.net/weixin_45369680/article/details/127693900
相關推薦
- 2022-04-16 Android給通知channel靜音的方法實例_Android
- 2022-06-10 ASP.NET?Core使用EF查詢數(shù)據(jù)_實用技巧
- 2022-04-15 c語言?深入理解函數(shù)的遞歸_C 語言
- 2023-06-17 python?__init__與?__new__的區(qū)別_python
- 2022-06-23 批處理腳本del命令的具體使用_DOS/BAT
- 2022-10-23 Python繪制牛奶凍曲線(高木曲線)案例_python
- 2022-07-21 CSS復合型寫法
- 2022-12-09 ReactQuery系列React?Query?實踐示例詳解_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支