当前位置: 首页 > 知识库问答 >
问题:

类型不匹配:推断类型为HomeViewModel!但是ViewModel!预料之中

丘飞
2023-03-14

大家下午好,我有一个问题,我想知道是什么原因造成的

我的主要活动。kt

package com.example.albumapp.ui

import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.albumapp.R
import com.example.albumapp.data.PostModel
import com.example.albumapp.viewmodel.HomeViewModel
import kotlinx.android.synthetic.main.activity_main.*



class MainActivity : AppCompatActivity() {
    lateinit var adapter: HomeAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        **var vm = ViewModelProvider(this)[HomeViewModel::class.java]**

        initAdapter()

        vm.fetchAllPosts()

        vm.postModelListLiveData?.observe(this, Observer {
            if (it!=null){
                rv_home.visibility = View.VISIBLE
                adapter.setData(it as ArrayList<PostModel>)
            }else{
                Toast.makeText(this, "Failed", Toast.LENGTH_SHORT).show()
            }
            progress_home.visibility = View.GONE
        })

    }

    private fun initAdapter() {
        adapter = HomeAdapter(this)
        rv_home.layoutManager = LinearLayoutManager(this)
        rv_home.adapter = adapter
    }


}

视图模型。kt

class HomeViewModel {
    private var homeRepository:HomeRepository?=null
    var postModelListLiveData : LiveData<List<PostModel>>?=null

    init {
        homeRepository = HomeRepository()
        postModelListLiveData = MutableLiveData()
    }

    fun fetchAllPosts(){
        postModelListLiveData = homeRepository?.fetchAllPosts()
    }
}

我想知道为什么会导致类型不匹配,你如何修复这种类型不匹配?(两颗星的线是问题的原因)

共有1个答案

陶文林
2023-03-14

您的HomeViewModel应该像这样扩展ViewModel

class HomeViewModel : ViewModel() {
}

那就试试这个

var homeViewModel =
            ViewModelProvider(this).get(HomeViewModel::class.java)
 类似资料: