8

通常,如果我想用 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);
}
4

3 回答 3

17

使用该问题的答复中建议的方法有效

@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);
}
于 2016-05-09T13:23:12.127 回答
4

我的一个编码填充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);
                    }
                });

    }
    ...

记得在 app gradle 中添加正确的 Glide 版本,4.7.1 应该可以使用这个:

   implementation 'com.github.bumptech.glide:glide:4.7.1'
于 2018-06-21T11:33:39.390 回答
0

由于不推荐使用 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;
         }
        });
于 2021-07-12T20:15:06.253 回答