使用 Glide 在 MenuItem 中加载远程图像

Load a remote image in a MenuItem using Glide

通常,如果我想用 Glide 加载图像,我会写以下内容:

Glide.with(context)
     .load(theURLOftheImage)
     .error(R.drawable.ic_error_image)
     .into(theImageView);

但是如果我需要将 URL 的图像加载到必须实时更改的 MenuItem 中怎么办?

以下是不可能的,因为方法into不接受参数:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem settingsItem = menu.findItem(R.id.actionbar_menu_profile_actions);
    if (changeImage) {
        Glide.with(this).load(theURLOftheImage).error(R.drawable.ic_error_image).into(settingsItem);
    }
    return super.onPrepareOptionsMenu(menu);
}

使用 this question 的回复中建议的方法行之有效

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem settingsItem = menu.findItem(R.id.actionbar_menu_profile_actions);
    if (changeImage) {
         Glide.with(this).asBitmap().load(theURLOfTheImage).into(new SimpleTarget<Bitmap>(100,100) {
            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                settingsItem.setIcon(new BitmapDrawable(getResources(), resource));
            }
        });
    }
    return super.onPrepareOptionsMenu(menu);
}

我的一个代码填充 BottomNavigationView 的另一种方法:

    ...
    bottomNavigationView = findViewById(R.id.bottomNavigationView);

    if(bottomNavigationView != null) {

        bottomNavigationView.inflateMenu(R.menu.bottom_main_menu);

        Menu bottomMenu = bottomNavigationView.getMenu();

        //bottomMenu.removeItem(0);

        final MenuItem menuItem = bottomMenu.add("Test 95");

        Glide
                .with(this)
                .load("https:// <add your image resource link here>")
                .into(new SimpleTarget<Drawable>() {
                    @Override
                    public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                        menuItem.setIcon(resource);
                    }
                });

    }
    ...

记得在应用程序中添加正确的 Glide 版本 gradle,4.7.1 应该适用于此版本:

   implementation 'com.github.bumptech.glide:glide:4.7.1'

由于 SimpleTarget 已被弃用,因此针对此页面的用户还有其他解决方案。

 Glide
        .with(activity)
        .load(path)
        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
        .centerCrop()
        .listener(new RequestListener<Drawable>() {
         @Override
         public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
         
          return false;
         }

         @Override
         public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
         menuItem.setIcon(resource);
          return false;
         }
        });