有没有办法从recyclerview android kotlin获取最后选择的位置和当前选择的位置?

问题描述 投票:0回答:1

我目前正在使用 recyclerview 为 Android 应用程序构建自定义日历。 这个应用程序包含有关日程管理的元素,并且提出了通过recyclerview进行多个日期选择的需求。

目前的布局是:

recyclerview只保存日历中的数字。所有文本均在 TextView 中制作,并通过 GridLayout 和 LinearLayout 对齐。

Recyclerview适配器代码:

package com.example.mymate

import android.content.Context
import android.graphics.Color
import android.os.Build
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.AdapterView.OnItemClickListener
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.example.mymate.databinding.ListitemCalendarBinding
import java.time.LocalDate

class CalendarAdapter(val context: Context, val dayList: ArrayList<LocalDate?>): RecyclerView.Adapter<CalendarAdapter.DayViewHolder>() {

    class DayViewHolder(val binding: ListitemCalendarBinding): RecyclerView.ViewHolder(binding.root) {
        fun bind(item: String, color: String) {
            val day = binding.dayText
            val spend = binding.billText
            day.text = item
            spend.text = item
            //text color
            if (color == "blue") {
                day.setTextColor(Color.BLUE)
            } else if (color == "red") {
                day.setTextColor(Color.RED)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DayViewHolder {
        val binding = ListitemCalendarBinding.inflate(LayoutInflater.from(context), parent, false)
        return DayViewHolder(binding)
    }

    override fun getItemCount(): Int {
        return dayList.size
    }

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onBindViewHolder(holder: DayViewHolder, position: Int) {
        var day = dayList[position]
        var daytext = ""
        if (dayList[position] == null) {
            daytext = ""
        } else {
            daytext = day?.dayOfMonth.toString()
        }
        if ((position + 1) % 7 == 0) {
            holder.bind(daytext, "blue")
        } else if (position == 0 || position % 7 == 0) {
            holder.bind(daytext, "red")
        } else {
            holder.bind(daytext, "black")
        }
        holder.itemView.setOnClickListener{
            var iYear = day?.year
            var iMonth = day?.month
            var iDay = day?.dayOfMonth
            var fullday = day


            //TODO: item click event
        }
    }
}

还没有计划其他功能,因此点击事件实际上是空的。

有什么方法可以获取所选项目的位置以及之前选择的项目的位置吗?我正在努力获取最后选定的位置信息,并通过位置访问该项目以更改所选项目和之前所选项目之间的项目的背景颜色、文本等。

android kotlin android-recyclerview calendar
1个回答
0
投票

如果我正确理解你的问题,也许是这样?在适配器中声明两个变量:

var beforeSelectedPosition = -1
var lastSelectedPosition = -1

然后在

setOnClickListener
上执行以下操作:

holder.itemView.setOnClickListener{
    // Other codes
    
    if(lastSelectedPosition == -1) {
        lastSelectedPosition = holder.absoluteAdapterPosition
    }else {
        beforeSelectedPosition = lastPositionSelected
        lastPositionSelected = holder.absoluteAdapterPosition
    }
}

无论何时您需要,只需致电

adapter.lastPositionSelected
adapter.beforeSelectedPosition

© www.soinside.com 2019 - 2024. All rights reserved.