如何通过滑翔(或其他)在listView项目中加载小部件中的图像

Posted

技术标签:

【中文标题】如何通过滑翔(或其他)在listView项目中加载小部件中的图像【英文标题】:How load images in widget in listView item via glide (or other) 【发布时间】:2019-09-24 01:07:31 【问题描述】:

我有带有ListView 的小部件。我尝试将列表项中的图像加载到ImageView

var uri = Uri.Parse(item.UrlPreviewImage);
var widgetTarget = new AppWidgetTarget(_context, Resource.Id.imageView_widgetListItemRss_rssIcon, itemView, _widgetId);
Xamarin.Essentials.MainThread.BeginInvokeOnMainThread(() =>
    
        Glide.With(_context.ApplicationContext)
             .AsBitmap()
             .Load(uri)
             .Into(widgetTarget);
    );

它有效,但有些奇怪。它从屏幕上移除其他元素并使背景透明。

但必须像这样工作(仅在左侧有图标):

我必须做什么?谢谢

附: C# 中的代码,但 Kotlin 或 Java 中的代码也将很有用

更多代码:

public RemoteViews GetViewAt(int position)

    var itemView = new RemoteViews(_context.PackageName, Resource.Layout.widget_list_item_rss);

    var item = _list[position];

    var subTitle = item.UpdateTime == null
        ? Strings.RssFeedItemNotUpdated
        : $"Strings.RssFeedItemUpdated item.UpdateTime.Value.ToShortGeneralLocaleString()";
    var countMessages = item.CountNewMessages.ToString();

    itemView.SetTextViewText(Resource.Id.textView_widgetListItemRss_title, item.Name);
    itemView.SetTextViewText(Resource.Id.textView_widgetListItemRss_subtitle, subTitle);
    itemView.SetTextViewText(Resource.Id.textView_widgetListItemRss_rssCount, countMessages);
    if (!string.IsNullOrEmpty(item.UrlPreviewImage))
    
        var uri = Uri.Parse(item.UrlPreviewImage);
        var widgetTarget = new AppWidgetTarget(_context, Resource.Id.imageView_widgetListItemRss_rssIcon, itemView, _widgetId);

        Xamarin.Essentials.MainThread.BeginInvokeOnMainThread(() =>
        
            Glide.With(_context.ApplicationContext)
                .AsBitmap()
                .Load(uri)
                .Into(widgetTarget);
        );
    

    return itemView;

【问题讨论】:

Glide.AsBitmap()需要什么?尝试删除它。 @NickBapu 我得到java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.Bitmap. Glide.AsBitmap 刚刚投 【参考方案1】:

对于 Glide ver.4,我使用:

FutureTarget<Bitmap> futureTarget = Glide.with(context)
            .asBitmap()
            .load("picture URL")
            .submit(250, 250);
    try 
        row.setImageViewBitmap(R.id.yourImageViewInItemView, futureTarget.get());
     catch (InterruptedException | ExecutionException e) 
        e.printStackTrace();
    

【讨论】:

【参考方案2】:

我用毕加索解决了

if (!string.IsNullOrEmpty(item.UrlPreviewImage))

    try
    
        var picture = Picasso.With(_context).Load(item.UrlPreviewImage).Get();
        itemView.SetImageViewBitmap(Resource.Id.imageView_widgetListItemRss_rssIcon, picture);
    
    catch (Exception e)
    
        Console.WriteLine(e);
    

【讨论】:

以上是关于如何通过滑翔(或其他)在listView项目中加载小部件中的图像的主要内容,如果未能解决你的问题,请参考以下文章

在 pyqt 中加载图像和文本

在 Android 中加载动态项目时无法将页脚视图添加到列表视图

如何通过Spring Boot在MongoDB中加载初始数据?

Javascript/jquery:如何检测在其他窗口或应用链接中加载的页面?

使用 AsyncTask 在 ListView 中加载图片

如何在滑动时在 PageView 中加载新数据