Тип Lazy не находит метод getValue
[
Type 'Lazy<TypeVariable(T)>' has no method 'getValue(CrimeListFragment, KProperty<*>)' and thus it cannot serve as a delegate
У меня была какая-то проблема, когда AS выдавала ошибки, хотя их там вообще не должно было быть (резко, без причины). У меня это было 1 раз, я удалил какой-то файл (с настройками вроде), и все заработало. Сегодня я вновь столкнулся с этой проблемой. Я забыл какой файл удалял, поэтому пробовал вызывать Invalidate Cache/Restart и Clean Project. Сначала мне этого помогало, потом через пару минут опять высветились те же ошибки. В этот раз я удалил папку cache в .gradle. Мне это помогло, но опять же, на пару минут. Потом появилась эта ошибка, не знаю что не так, ничего не удалял, и не менял, в bulild.gradle, и импорты тоже не трогал. Помогите пожалуйста, прошу...
package com.example.criminalintent
import android.os.Bundle
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
private const val TAG = "CrimeLisFragment"
class CrimeListFragment : Fragment(){
private lateinit var crimeRecyclerView: RecyclerView
private var adapter: CrimeAdapter? = null
private val crimeListViewModel: CrimeListViewModel by lazy {
ViewModelProviders.of(this).get(CrimeListViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "Total crimes: ${crimeListViewModel.crimes.size}")
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_crime_list, container, false)
crimeRecyclerView = view.findViewById(R.id.crime_recycler_view) as RecyclerView
crimeRecyclerView.layoutManager = LinearLayoutManager(context)
updateUI()
return view
}
private fun updateUI() {
val crimes = crimeListViewModel.crimes
adapter = CrimeAdapter(crimes)
crimeRecyclerView.adapter = adapter
}
private inner class CrimeHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
private val titleTextView: TextView = itemView.findViewById(R.id.crime_title)
private val dateTextView: TextView = itemView.findViewById(R.id.crime_date)
private val titleTextViewPolice: TextView = itemView.findViewById(R.id.crime_title_police)
private val dateTextViewPolice: TextView = itemView.findViewById(R.id.crime_date_police)
private lateinit var crime: Crime
init {
itemView.setOnClickListener(this)
}
fun bind(crime: Crime) {
this.crime = crime
titleTextView.text = this.crime.title
dateTextView.text = this.crime.date.toString()
titleTextViewPolice.text = this.crime.title
dateTextViewPolice.text = this.crime.date.toString()
}
fun bindCrimePolice(crime: Crime) {
this.crime = crime
titleTextViewPolice.text = this.crime.title
dateTextViewPolice.text = this.crime.date.toString()
}
override fun onClick(v: View) {
val toast = Toast.makeText(context, "${crime.title} pressed", Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
}
}
private inner class CrimeAdapter(var crimes: List<Crime>) : RecyclerView.Adapter<CrimeHolder>() {
val crime = Crime()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CrimeHolder {
Log.i(TAG, "onCreateViewHolder(parent: ViewGroup, viewType: Int) called $viewType")
val view = if (viewType == 0) {
LayoutInflater.from(parent.context).inflate(R.layout.list_item_crime, parent, false)
} else {
LayoutInflater.from(parent.context).inflate(R.layout.list_item_crime_police, parent, false)
}
//val view = layoutInflater.inflate(R.layout.list_item_crime , parent, false)
return CrimeHolder(view)
}
override fun onBindViewHolder(holder: CrimeHolder, position: Int) {
Log.i(TAG, "onBindViewHolder(holder: CrimeHolder, position: Int) called pos $position")
val crime = crimes[position]
holder.bind(crime)
}
override fun getItemCount(): Int = crimes.size
override fun getItemViewType(position: Int): Int {
Log.i(TAG, "getItemViewType(position: Int) called pos $position")
if (crime.isCrime) {
return 0
}
return 1
}
}
companion object {
fun newInstance() : CrimeListFragment {
return CrimeListFragment()
}
}
}