我是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加载图像的代码可以工作。谁能告诉我我在做什么错?谢谢!
答案 0 :(得分:1)
您正在传递ImageView上下文。根据Glide文档,您应该将Fragment实例传递给with方法。
尝试:
GlideApp.with(this)
.load(card?.url)
.placeholder(R.drawable.placeholder_avatar)
.into(imgView)
带有(视图)的公共静态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)