定義:
在 Android 中徒恋,ViewModel 的作用就是在 UI 控制器( 如 Activity、Fragment)的生命周期中保存和管理 UI 相關(guān)的數(shù)據(jù)亿乳。ViewModel 保存的數(shù)據(jù)在配置更改(如屏幕旋轉(zhuǎn))后會依然存在径筏,不會丟失。
優(yōu)點(diǎn):
- Activity發(fā)生屏幕旋轉(zhuǎn)數(shù)據(jù)保留
- ViewModel + LiveData 實(shí)現(xiàn) Fragment 之間共享數(shù)據(jù)
public class UserViewModel extends ViewModel {
private MutableLiveData<Integer> scoreData;
public MutableLiveData<Integer> getScoreData() {
if(scoreData == null){
scoreData = new MutableLiveData<>();
}
return scoreData;
}
}
class FragmentA : Fragment() {
private lateinit var userViewModel: UserViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.also {
userViewModel = ViewModelProviders.of(it).get(UserViewModel::class.java)
}
return inflater.inflate(R.layout.fragment_a, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userViewModel.scoreData.observe(viewLifecycleOwner, Observer<Int> {
textView1.text = it.toString()
})
}
}
class FragmentB : Fragment() {
private lateinit var userViewModel: UserViewModel
private var num = 0;
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.also {
userViewModel = ViewModelProviders.of(it).get(UserViewModel::class.java)
}
return inflater.inflate(R.layout.fragment_b, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
textView1.setOnClickListener {
num++
userViewModel.scoreData.postValue(num)
}
userViewModel.scoreData.observe(viewLifecycleOwner, Observer<Int> {
textView2.text = it.toString()
})
}
}