recyclerview/listview 适配器是否有调用一次的方法?

Does the recyclerview/listview adapter have a method called once?

由于某种原因,我必须在适配器内部进行一次操作。换句话说,滚动时不应重复此过程。 activity 中的 onCreate 方法在 activity 打开时工作一次。有没有在适配器内部执行此操作的方法?

更新

我的适配器class:

class EducationAdapter @Inject constructor(
var userManager: UserManager
) : ListAdapter<EducationModel, RecyclerView.ViewHolder>. 
(EDUCATION_ITEM_DIFF_CALLBACK) {

companion object {
}

var callBack: EducationAdapterCallBack? = null


interface EducationAdapterCallBack {
    fun onClickLayer(educationModel: EducationModel)
}

class EducationViewHolder(var binding: ItemEducationBinding) :
    RecyclerView.ViewHolder(binding.root) {
    fun setItem(item: EducationModel) {
        binding.educationItem = item

    }
}

@Nonnull
override fun onCreateViewHolder(
    @Nonnull parent: ViewGroup,
    viewType: Int
): RecyclerView.ViewHolder {
    val binding: ItemEducationBinding = DataBindingUtil.inflate(
        LayoutInflater.from(parent.context),
        R.layout.item_education, parent, false
    )
    return EducationAdapter.EducationViewHolder(binding)
}

override fun onBindViewHolder(@Nonnull holder: RecyclerView.ViewHolder, position: Int) {
    val item = getItem(position)
    when (holder) {
        is EducationAdapter.EducationViewHolder -> {
            holder.setItem(item)

           
            holder.binding.itemEducation.setOnClickListener {
                callBack?.onClickLayer(item)
            }


        }
    }
}
}

滚动列表视图时调用OncreateViewHolder 和onBindViewHolder。但是我想要一个shot process 有没有运行一次的方法?

更新 2

我创建了一个虚拟操作(我的原始代码太长,我创建了汇总虚拟操作)。 OnBind 方法应该是这样的:

override fun onBindViewHolder(@Nonnull holder: RecyclerView.ViewHolder, position: Int) {
        val item = getItem(position)
        when (holder) {
            is EducationAdapter.EducationViewHolder -> {
                holder.setItem(item)

                holder.binding.itemEducation.setOnClickListener {
                    callBack?.onClickLayer(item)
                }

                var isExpandClicked = false
                holder.binding.btnExpandProject.setOnClickListener {
                    if (isExpandClicked) {
                        isExpandClicked = false
                        val context = holder.binding.llTaskFaaliyet.context
                        holder.binding.btnExpandProject.setImageDrawable(
                            ContextCompat.getDrawable(
                                context,
                                R.drawable.ic_arrow_down
                            )
                        )

                        val headerText = TextView(context)
                        headerText.apply {
                            text = subTask.title
                            textSize = 16f
                            setTextColor(ContextCompat.getColor(context, R.color.marine))
                            gravity = Gravity.START
                            typeface = ResourcesCompat.getFont(context, R.font.ubuntu_bold)
                            setPadding(48, 16, 4, 0)
                            setBackgroundColor(ContextCompat.getColor(context, R.color.white))
                        }
                        holder.binding.llTask.add(headerText)

                    }else{
                        isExpandClicked = true
                        val context = holder.binding.llTask.context
                        holder.binding.btnExpandProject.setImageDrawable(
                            ContextCompat.getDrawable(
                                context,
                                R.drawable.ic_close
                            )
                        )
                        holder.binding.llTask.removeAllViews()

                    }
                    }


            }
        }
    }

我正在尝试创建以下视图: 扩展视图:

缩小视图

首次打开时应扩大视图。创建视图时应该是单次的。

如果将函数放在 bind 方法上,它应该在项目显示时触发。您可以采取一种简单的方法,在适配器范围上使用布尔值,在触发扩展功能后将更改为 false。然后用这个boolean来判断value是否为真,所以应该会触发expand函数。