使用 android 和 Kotlin 的 ViewModel:无法可视化价值

ViewModel with android and Kotlin: can't visualize value

我有我的片段主页视图模型,我想在这个视图模型中设置一个变量,以便将它传递到另一个片段中。我已经完成了视图模型的所有工作,但是当我启动我的模拟器时,应用程序没有显示任何内容...

HomeViewModel:

class HomeViewModel: ViewModel() {
    val text = MutableLiveData<String>()

    fun setText(string: String) {
        text.value = string
    }
}

主页片段(我在其中设置变量的值):

 private var valueFromHome = "ABCDEFG"

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // API CALL
        binding.buttonHomeFragmentApiCall.setOnClickListener {
            this.context?.let { getRandomComputerDetails(it, myResultListener) }

            // SET OF VALUE FOR VARIABLE IN VIEW MODEL
            homeViewModel = ViewModelProvider(requireActivity()).get(HomeViewModel::class.java)
            homeViewModel.setText(valueFromHome)
        }
    }

信息片段(我从视图模型中读取的地方):

class InfoFragment : Fragment() {
    private var _binding: FragmentInfoBinding? = null
    private lateinit var binding: FragmentInfoBinding
    private lateinit var homeViewModel: HomeViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentInfoBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)


        // I READ HERE FROM VIEW MODEL
        homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
        homeViewModel.text.observe(viewLifecycleOwner, Observer {
            binding.infoFragmentTextView.text = it
        })
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

因此,在我设置文本的信息片段中,恰好 binding.infoFragmentTextView.text = it 一旦我启动模拟器,没有显示任何实际内容(相反,我期待片段中有一个字符串 (ABCDEFG)。为什么?

您为每个视图模型使用了不同的范围。一个范围正确地限定为 activity,另一个范围限定为您的片段。

如果你想引用相同的视图模型,你需要在这两种情况下使用 ViewModelProvider(requireActivity())