片段中的 Glide 未下载图像
Image not being downloaded by Glide inside a Fragment
我正在尝试将图像下载到 Fragment 内的 ImageView 中,但 Glide 似乎甚至没有发出网络请求。 (我使用 Proxyman 从我的物理 Android 设备观察网络流量)。我不确定还能尝试什么。
片段代码如下:
class ExampleFragment : Fragment(R.layout.fragment_example) {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel: ExampleViewModel
private lateinit var binding: FragmentExampleBinding
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentExampleBinding.inflate(layoutInflater)
(activity as ExampleActivity).appComponent.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(ExampleViewModel::class.java)
// I have also tried `activity as FragmentActivity` instead of this
Glide.with(this).load("https://www.popwebdesign.net/popart_blog/wp-content/uploads/2018/01/tiny-png-panda.jpg")
.override(200)
.into(binding.imageViewFaceTaggingStart)
}
}
额外的细节:
- 我已阅读 http://bumptech.github.io/glide/doc/debugging.html#missing-images-and-local-logs,其中提到了一些我可以尝试的事情。我可以确认我调用
into()
,没有使用自定义目标,并且已经明确设置图像视图的大小和背景颜色以确保它不是“零宽度”。
- 我在 Activity.
中使用 FragmentContainerView
- 这里是 XML 文件的简化版:
<androidx.constraintlayout.widget.ConstraintLayout ... >
<androidx.appcompat.widget.Toolbar ...></androidx.appcompat.widget.Toolbar>
<ScrollView ...>
<LinearLayout ...>
<ImageView
android:id="@+id/image_view_face_tagging_start"
android:layout_width="200dp"
android:layout_height="200dp"
android:visibility="visible"
android:background="@android:color/black"
android:scaleType="centerCrop"/>
....more views (TextView, Space, Checkbox)
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
膨胀的视图和您使用的视图参考即binding
不一样,
class ExampleFragment : Fragment() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel: ExampleViewModel
private lateinit var binding: FragmentExampleBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentExampleBinding.inflate(layoutInflater)
return this.binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as ExampleActivity).appComponent.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(ExampleViewModel::class.java)
// I have also tried `activity as FragmentActivity` instead of this
Glide.with(this).load("https://www.popwebdesign.net/popart_blog/wp-content/uploads/2018/01/tiny-png-panda.jpg")
.override(200)
.into(binding.imageViewFaceTaggingStart)
}
}
现在片段的视图是 binding
,试试这个。
问题在这里class ExampleFragment : Fragment(R.layout.fragment_example)
现在片段将膨胀此 R.layout.fragment_example
而不是绑定,因此 binding
指的是另一个视图,
我正在尝试将图像下载到 Fragment 内的 ImageView 中,但 Glide 似乎甚至没有发出网络请求。 (我使用 Proxyman 从我的物理 Android 设备观察网络流量)。我不确定还能尝试什么。
片段代码如下:
class ExampleFragment : Fragment(R.layout.fragment_example) {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel: ExampleViewModel
private lateinit var binding: FragmentExampleBinding
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentExampleBinding.inflate(layoutInflater)
(activity as ExampleActivity).appComponent.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(ExampleViewModel::class.java)
// I have also tried `activity as FragmentActivity` instead of this
Glide.with(this).load("https://www.popwebdesign.net/popart_blog/wp-content/uploads/2018/01/tiny-png-panda.jpg")
.override(200)
.into(binding.imageViewFaceTaggingStart)
}
}
额外的细节:
- 我已阅读 http://bumptech.github.io/glide/doc/debugging.html#missing-images-and-local-logs,其中提到了一些我可以尝试的事情。我可以确认我调用
into()
,没有使用自定义目标,并且已经明确设置图像视图的大小和背景颜色以确保它不是“零宽度”。 - 我在 Activity. 中使用
- 这里是 XML 文件的简化版:
FragmentContainerView
<androidx.constraintlayout.widget.ConstraintLayout ... >
<androidx.appcompat.widget.Toolbar ...></androidx.appcompat.widget.Toolbar>
<ScrollView ...>
<LinearLayout ...>
<ImageView
android:id="@+id/image_view_face_tagging_start"
android:layout_width="200dp"
android:layout_height="200dp"
android:visibility="visible"
android:background="@android:color/black"
android:scaleType="centerCrop"/>
....more views (TextView, Space, Checkbox)
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
膨胀的视图和您使用的视图参考即binding
不一样,
class ExampleFragment : Fragment() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel: ExampleViewModel
private lateinit var binding: FragmentExampleBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentExampleBinding.inflate(layoutInflater)
return this.binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as ExampleActivity).appComponent.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(ExampleViewModel::class.java)
// I have also tried `activity as FragmentActivity` instead of this
Glide.with(this).load("https://www.popwebdesign.net/popart_blog/wp-content/uploads/2018/01/tiny-png-panda.jpg")
.override(200)
.into(binding.imageViewFaceTaggingStart)
}
}
现在片段的视图是 binding
,试试这个。
问题在这里class ExampleFragment : Fragment(R.layout.fragment_example)
现在片段将膨胀此 R.layout.fragment_example
而不是绑定,因此 binding
指的是另一个视图,