【day25】上传多张照片(下)

连假第二天,在这边先祝大家连假快乐啦,那延续昨天,我们现在已经把String的List拿到了,现在要做的就很简单,就是我们透过Recyclerview把它显示出来就可! 那麽我们就来啦

1.修改xml

既然提到recyclerview,我们首先就要把在fragment_add_invitation.xml的image改成recyclerview啦!

<androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/rv_add_invitation_image"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"/>

再过来我们要新增itemView

<?xml version="1.0" encoding="utf-8"?>

<layout
    xmlns:android="http://schemas.android.com/apk/res/android">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/banner_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />



</RelativeLayout>

</layout>

2.新增Adapter

这边的Adapter就跟之前的做法一样啦,只是我们要把里面的资料改成String,因为我们会直接把List传进去,然後直接在onBindViewHolder透过Glide把图片显示出来就好啦!

package com.example.petsmatchingapp.ui.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.petsmatchingapp.databinding.BannerItemLayoutBinding
import com.example.petsmatchingapp.utils.Constant
import kotlinx.android.synthetic.main.banner_item_layout.view.*
import timber.log.Timber

class MultiplePhotoAdapter(): ListAdapter<String, MultiplePhotoAdapter.MyViewHolder>(DiffCallback) {


    companion object DiffCallback : DiffUtil.ItemCallback<String>() {
        override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
            return oldItem === newItem

        }

        override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
            return oldItem == oldItem
        }
    }


    class MyViewHolder(val binding: BannerItemLayoutBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bind(item: String) {
            binding.executePendingBindings()

        }


    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        return MyViewHolder(BannerItemLayoutBinding.inflate(LayoutInflater.from(parent.context)))


    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val model = getItem(position)
        Timber.d("测试inside adapter: $model")
        Constant.loadPetImage(model,holder.itemView.banner_image)
        holder.bind(model)

    }
}

3.初始化Adapter

我们一样要先初始化我们的adapter

private lateinit var multipleAdapter: MultiplePhotoAdapter
private fun setAdapter(){
        val banner = binding.rvAddInvitationImage
        multipleAdapter = MultiplePhotoAdapter()
        banner.adapter = multipleAdapter
        val linearLayout = LinearLayoutManager(requireContext())
        linearLayout.orientation = LinearLayoutManager.HORIZONTAL
        banner.layoutManager =  linearLayout

    }

然後我们再我们昨天拿到List的地方,我们透过submit,把list传进去


fun saveImageSuccessful(uriList: List<Uri>){
showSnackBar(resources.getString(R.string.update_pet_image_successful),false)


val list =mutableListOf<String>()
for(i in uriList){
list.add(i.toString())
    }


multipleAdapter.submitList(list)
}

太棒啦,这样我们就完成啦,那就期待明天啦!


<<:  Day26:今天来聊一下Hacking Mobile Platforms

>>:  世界上最快乐的人 (2) 有所缘禅修

Day 02 React ?? Native ??

HI,到了第二天,感觉每天写一篇文章的感觉真的会有一种怠惰感,还是好好习惯吧 什麽是 React 先...

Flutter体验 Day 1-前言

前言 Flutter入门 Flutter 是 Goole 推出的开源 UI 工具包,通过 Dart ...

入门魔法 - 物件

前情提要 艾草:「来,既然要学习物件让我带你瞧瞧这个秘方。」 (从异空间拿出一张古老透着神秘光泽的纸...

30天学习笔记 -day 27-Motion Editor(下篇)

昨天制作了按钮由下往上的动画,今天要加上变化,让昨天的动画看起来不那麽单调。 加入< KeyF...

MyBatis 设定

MyBatis设定 ...