How to use field injection for two custom classes using Hilt?

Viewed 24

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)
    }
}
0 Answers
Related