【问题标题】:Image in reclyerView becoming smaller with change of layoutManagerreclyerView 中的图像随着 layoutManager 的变化而变小
【发布时间】: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)
    }

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    使用以下代码行代替您拥有的代码行。

                     Glide.with(this)
                    .load(hit.webformatURL)
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .override(-1, -1)
                    .into(this)
    

    图像变小可能是由于 glide 库默认进行的预缓存。

    Caching Strategy for Glide

    【讨论】:

    • 好的,知道了!谢谢!但是现在每个开关之间都有加载时间。有没有办法在解决这个问题的同时解决这个问题?
    • 尝试 DiskCacheStrategy.DATA 而不是 DiskCacheStrategy.NONE
    猜你喜欢
    • 2018-09-15
    • 2020-10-02
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多