在Android Jetpack中,可以使用共享ViewModel来在多个Fragment之间共享数据和状态。共享ViewModel的生命周期可以通过以下步骤来实现:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
import androidx.lifecycle.ViewModel
class SharedViewModel : ViewModel() {
// 在这里定义需要共享的数据和状态
}
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
class MyFragment : Fragment() {
private val sharedViewModel: SharedViewModel by activityViewModels()
// 在这里可以使用sharedViewModel来访问共享的数据和状态
}
import androidx.databinding.DataBindingUtil
import android.os.Bundle
import androidx.fragment.app.Fragment
class MyFragment : Fragment() {
private lateinit var binding: MyFragmentBinding
private val sharedViewModel: SharedViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = DataBindingUtil.inflate(inflater, R.layout.my_fragment, container, false)
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = sharedViewModel
return binding.root
}
}
通过以上步骤,你就可以在多个Fragment之间共享ViewModel,并且ViewModel的生命周期将与所关联的Activity的生命周期保持一致。这样可以确保在Activity销毁时,ViewModel的数据也会被正确地清除。