How to load image from url into BottomNavigationView menu item icon

Viewed 831

I wanted to load image from url into bottomnavigationview's menu item icon. same like instagram we wanted to show profile image in one of our menu which might change while switching from different available profiles. Currently, I am trying below code but it does not load image every time.

val menu = mViewDataBinding?.bnvNavigation?.menu
    val menuItem = menu?.findItem(R.id.menu_profile)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        menuItem?.setIconTintList(null)
        menuItem?.setIconTintMode(null)
    }


    Glide.with(this)
        .asBitmap()
        .load(profilePic)
        .apply(
            RequestOptions.circleCropTransform()
                .placeholder(R.drawable.user_profile_icon_updated)
        )
        .into(object :
            CustomTarget<Bitmap>(UIHelper.dpToPx(this, 24), UIHelper.dpToPx(this, 24)) {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                menuItem?.icon = BitmapDrawable(resources, resource)
              }

            override fun onLoadCleared(placeholder: Drawable?) {
            }
        })
2 Answers

Above code is working as expected, it just a matter of passing application context to Glide, Glide.with(App.instance)

App is my application class

val menu = mViewDataBinding?.bnvNavigation?.menu
    val menuItem = menu?.findItem(R.id.menu_profile)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        menuItem?.setIconTintList(null)
        menuItem?.setIconTintMode(null)
    }
    Glide.with(App.instance)
        .asBitmap()
        .load(profilePic)
        .placeholder(getProfilePlaceholderFilled())
        .error(getProfilePlaceholderFilled())
        .apply(
            RequestOptions.circleCropTransform().placeholder(getProfilePlaceholderFilled())
        )
        .into(object :
            CustomTarget<Bitmap>(UIHelper.dpToPx(this, 80), UIHelper.dpToPx(this, 80)) {
            override fun onResourceReady(
                resource: Bitmap,
                transition: Transition<in Bitmap>?
            ) {
                menuItem?.icon = BitmapDrawable(
                    resources, resource
                )
            }

            override fun onLoadFailed(errorDrawable: Drawable?) {
                menuItem?.icon = errorDrawable
            }

            override fun onLoadCleared(placeholder: Drawable?) {
            }
        })
Related