I'm kinda new in using Dagger-Hilt while I'm working on a location app but I'm facing issues with Dagger-Hilt about two classes named LocationsListAdapter and CategoryAvatar. I'm trying to use field injection and inject CategoryAvatar into LocationsListAdapter. I've annotated the constructor of CategoryAvatar by @Inject annotation but still I got error from hilt says lateinit property categoryAvatar not initialized. I tried to use @EntryPoint but seems like it only can be used for interfaces. What should I do ?
CategoryAvatar.kt
class CategoryAvatar @Inject constructor() {
fun getImageResourceId(category:String):Int {
when(category){
"AIRPORT" -> return R.drawable.ic_airport
"AGRICULTURE" -> return R.drawable.ic_agriculture
"BANK" -> return R.drawable.ic_bank
"BEACH" -> return R.drawable.ic_beach
"CAFE_PUB" -> return R.drawable.ic_cafe
"CAR_WASH" -> return R.drawable.ic_car_wash
"CASH_DISPENSER" -> return R.drawable.ic_atm
"CASINO" -> return R.drawable.ic_casino
"CINEMA" -> return R.drawable.ic_cinema
"CITY_CENTER" -> return R.drawable.ic_city_center
"COLLEGE_UNIVERSITY" -> return R.drawable.ic_college
"COMPANY" -> return R.drawable.ic_company
"DENTIST" -> return R.drawable.ic_hospital
"DEPARTMENT_STORE" -> return R.drawable.ic_store
"DOCTOR" -> return R.drawable.ic_hospital
"EXCHANGE" -> return R.drawable.ic_exchange
"HOTEL_MOTEL" -> return R.drawable.ic_hotel
"LIBRARY" -> return R.drawable.ic_library
"MARKET" -> return R.drawable.ic_store
"MUSEUM" -> return R.drawable.ic_museum
"PHARMACY" -> return R.drawable.ic_pharmacy
"POLICE_STATION" -> return R.drawable.ic_police
"RESTAURANT" -> return R.drawable.ic_restaurant
else -> return R.drawable.ic_default
}
}
}
LocationsListAdapter.kt
class LocationsListAdapter(
private val locationList:List<Result?>
): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
@Inject
lateinit var categoryAvatar: CategoryAvatar
private val VIEW_TYPE_ITEM:Int = 0
private val VIEW_TYPE_LOADING:Int = 1
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == VIEW_TYPE_ITEM){
val view = LayoutInflater.from(parent.context).inflate(R.layout.locations_list_item , parent , false)
return ItemViewHolder(view)
} else {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_loading , parent , false)
return LoadingViewHolder(view)
}
}