【发布时间】:2021-08-17 12:49:22
【问题描述】:
好的,所以我有一个画廊应用程序,它可以选择将 layoutManager 更改为线性或网格或交错(我正在使用单选按钮处理这些)。它们正在工作,但由于某种原因,当我从网格更改为线性时,前几张照片由于某种原因较小。但是重新加载后它们会变得很好。
我的适配器类是:
fun setImageList(imageList: List<Hit>) {
this.imageList = imageList
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewHolder(
DataBindingUtil.inflate(
LayoutInflater.from(context),
R.layout.item_images, parent, false
)
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val hit = imageList[position]
((holder) as ViewHolder).setBinding(hit)
Glide.with(this)
.load(hit.webformatURL)
.transition(DrawableTransitionOptions.withCrossFade())
.override(-1, -1)
.into(this)
}
override fun getItemCount(): Int {
return imageList.size
}
class ViewHolder(var binding: ItemImagesBinding) : RecyclerView.ViewHolder(
binding.root
)
我的 mainActivity 类:
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
imagesModelList = emptyList()
imagesAdapter = ImagesAdapter(this, imagesModelList, this)
binding.recyclerView.adapter = imagesAdapter
imagesViewModel = ViewModelProvider(this).get(ImagesViewModel::class.java)
imagesViewModel.getImagesListObserver()?.observe(this, {
imagesModelList = it
imagesAdapter.setImageList(it)
}
})
imagesViewModel.makeApiCall(binding.searchView.query.toString())
}
像这样改变 layoutManager:
fun grid(v: View) {
binding.recyclerView.layoutManager =
GridLayoutManager(this, 3)
}
fun linear(v: View) {
binding.recyclerView.layoutManager =
LinearLayoutManager(applicationContext)
}
fun staggered(v: View) {
binding.recyclerView.layoutManager =
StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL)
}
【问题讨论】: