无法使用Glide

时间:2019-06-28 13:45:42

标签: android android-fragments android-glide

我是iOS开发人员,对Kotlin / Android还是很陌生,所以我有点迷茫和困惑。

我在一个片段中有一个ViewPager,它需要从URL中为寻呼机中的每个项目加载图像。寻呼机中的每个项目都是寻呼机片段的一个实例。我正在使用Glide加载图像。我用来渲染图像的代码来自活动类,该类工作正常。但是,在寻呼机片段中,没有图像加载。

这是我的传呼机项目片段的布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context="some.path.StatCardPagerItem">

    <ImageView
            android:id="@+id/statCardImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</FrameLayout>

在我的片段中,onCreateView中包含以下内容:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.card_pager_item, container, false)
    val imgView = view.statCardImageView

    card?.url?.let {
        GlideApp.with(imgView.context)
            .load(card?.url)
            .placeholder(R.drawable.placeholder_avatar)
            .into(imgView)
    }
    return view
}

加载寻呼机时,将显示正确数量的寻呼机项目,但它们仅包含占位符化身。令人困惑的部分是,如果包含在Activity中但不包含在片段中,则可以从Glide加载图像的代码可以工作。谁能告诉我我在做什么错?谢谢!

3 个答案:

答案 0 :(得分:1)

您正在传递ImageView上下文。根据Glide文档,您应该将Fragment实例传递给with方法。

尝试:

GlideApp.with(this)
            .load(card?.url)
            .placeholder(R.drawable.placeholder_avatar)
            .into(imgView)

参考:https://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/Glide.html#with-android.app.Fragment-

  

带有(视图)的公共静态RequestManager

     

使用Glide开始加载   将与Fragment,Fragment或   包含视图的活动。碎片或碎片被假定为   如果View是View返回的View的子级,则包含View   Fragment.getView()}方法。

     

如果视图是   不附加。最好选择Activity和Fragment变体,除非您   加载到View子类中。

     

对于大型层次结构,此方法可能效率不高。考虑   在附加视图后记录结果。

答案 1 :(得分:0)

您需要通过with()方法传递活动上下文

GlideApp.with(getActivity())
        .load(card?.url)
        .placeholder(R.drawable.placeholder_avatar)
        .into(imgView)

答案 2 :(得分:0)

使用ImageView将图像加载到Glide

Glide.with(this).load(imageUrl).into(imageView)