【发布时间】:2020-08-19 11:20:05
【问题描述】:
我正在尝试实例化一个 viewModel 类,该类包含一个 init 块,我正在尝试通过 volley 发送 Get 请求。问题是当我试图在我的 Fragment 类中实例化这个类时,我收到了这个错误,我不知道为什么。也许来自构造函数的上下文会是问题?谢谢:
ViewModel 类
class BooksFragmentViewModel(c : Context) : ViewModel() {
lateinit var cont: Context
var books: MutableLiveData<MutableList<BookItem>> = MutableLiveData<MutableList<BookItem>>()
var triggerAddBook = MutableLiveData<Boolean>()
var triggerDeleteBook = MutableLiveData<Boolean>()
var triggerEditBook = MutableLiveData<Boolean>()
var bookRepo: BookRepository = BookRepository()
var bookItemAdd: BookItem? = null
var bookItemDelete: BookItem? = null
var bookItemEdit : BookItem? = null
var bookNew: LiveData<BookItem> = Transformations.switchMap(triggerAddBook) {
if (it != null && it)
addBook()
else
null
}
init {
books = bookRepo.booksGetRequest(c)
}
片段类
class BooksFragment : Fragment(), BooksAdapter.OnDeleteBtnClicked, BooksAdapter.OnEditBtnClicked {
lateinit var booksModel: BooksFragmentViewModel
var position: Int = 0
private var adapter: BooksAdapter = BooksAdapter(this, this)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_books, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
booksModel = ViewModelProvider(requireActivity()).get(BooksFragmentViewModel::class.java)
booksLoading_progressBar.visibility = View.VISIBLE
var c: Context? = context
if (c != null) {
booksModel.setContext(c)
}
【问题讨论】:
-
您忘记添加 Viewmodel 工厂了吗?
-
我应该怎么做?谢谢@MohamedAbdelraZek
-
好的,我会发布答案以明确