【问题标题】:Type Mismatch: inferred type is HomeViewModel! but ViewModel! was expected类型不匹配:推断类型是 HomeViewModel!但是视图模型!预计
【发布时间】:2021-06-24 14:21:21
【问题描述】:

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

我的 MainActivity.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
    }


}

ViewModel.kt

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

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

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

我想知道为什么会导致类型不匹配以及如何解决这种类型不匹配? (有两颗星的线是问题所在)

【问题讨论】:

  • 你能把你的代码包含在你的HomeViewModel吗?

标签: android kotlin


【解决方案1】:

您的 HomeViewModel 应该像这样扩展 ViewModel

class HomeViewModel : ViewModel() {
}

那就试试这个

var homeViewModel =
            ViewModelProvider(this).get(HomeViewModel::class.java)

【讨论】:

  • 也发布您的视图模型类
  • 我现在为你添加了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2018-04-23
相关资源
最近更新 更多