官方地址:https://developer.android.google.cn/topic/libraries/architecture/viewmodel
B站视频:https://www.bilibili.com/video/BV1fY4y1i7BG?p=7&vd_source=c9e619eb6c2ba53337eccc49eb025732
执行add方法,+1+1+1+1,i为4,屏幕旋转i会变回0
class MainActivity : AppCompatActivity() {
private lateinit var btnAdd:Button
private lateinit var tvCount: TextView
private var i = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnAdd = findViewById(R.id.btnAdd)
tvCount = findViewById(R.id.tvCount)
btnAdd.setOnClickListener(View.OnClickListener {
add()
})
}
fun add(){
i++
tvCount.text = i.toString()
}
}
使用viewmodel,横竖屏数据是不会变为0的
class MyViewModel :ViewModel() {
private var testNum = MutableLiveData<Int>()
private var i = 0
fun getTestNum():MutableLiveData<Int>{
return testNum
}
fun add(){
i ++
testNum.value = i
}
}
class MainActivity : AppCompatActivity() {
private lateinit var btnAdd:Button
private lateinit var tvCount: TextView
val model: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnAdd = findViewById(R.id.btnAdd)
tvCount = findViewById(R.id.tvCount)
val model: MyViewModel by viewModels()
model.getTestNum().observe(this, Observer {
tvCount.text = it.toString()
})
btnAdd.setOnClickListener(View.OnClickListener {
add()
})
}
fun add(){
model.add()
val testNum = model.getTestNum().value
tvCount.text = testNum.toString()
}
}
在 Fragment 之间共享数据
class MainActivity : AppCompatActivity() {
private val viewModel by lazy {
ViewModelProvider(this).get(LeftViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
val btnAdd = findViewById<Button>(R.id.btnAdd)
btnAdd.setOnClickListener(View.OnClickListener {
viewModel.add()
})
}
}
class LeftFragment : Fragment() {
private lateinit var tvTest:TextView
private val viewModel by lazy {
ViewModelProvider(requireActivity()).get(LeftViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.left_fragment, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
tvTest = view.findViewById(R.id.tvTest)
viewModel.getLiveData().observe(requireActivity()){
tvTest.text = it.toString()
}
}
}
class LeftViewModel : ViewModel() {
private var testLiveData = MutableLiveData<Int>()
private var i = 0
fun getLiveData(): MutableLiveData<Int> {
return testLiveData
}
fun add(){
i ++
testLiveData.value = i
}
}
class RightFragment : Fragment() {
private lateinit var tvTest: TextView
private val viewModel by lazy {
ViewModelProvider(requireActivity()).get(LeftViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_right, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
tvTest = view.findViewById(R.id.tvTest)
viewModel.getLiveData().observe(requireActivity()){
tvTest.text = it.toString()
}
}
}
网友评论