Я делаю календарь в одну строку. Я использую реселлервью. Как я могу отследить положение текущей даты, чтобы показать ее в центре экрана? Прямо сейчас он показывает первый день месяца
Это то, что он показывает сейчас

А ниже - необходимый

class DateAdapter(private val dateList: List<Calendar>, val currentDate: String):
RecyclerView.Adapter<MyViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val layoutInflater = LayoutInflater.from(parent?.context)
val cellForRow = layoutInflater.inflate(R.layout.date_layout, parent, false)
val holder = MyViewHolder(parent)
return holder
}
override fun getItemCount(): Int {
return dateList.count()
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder?.setData(currentDate, dateList, position)
Log.d(TAG,holder.layoutPosition.toString())
}
}
# MyViewHolder #
class MyViewHolder(private val view: View): RecyclerView.ViewHolder(view){
fun setData(currentDate: String, dateList: List<Calendar>, position: Int){
if(currentDate == dateList[position].get(Calendar.DATE).toString()){
view?.str_day_element?.setTextColor(Color.WHITE)
view?.num_day_element?.setTextColor(Color.WHITE)
view?.str_day_element?.setBackgroundColor(ContextCompat.getColor(view.context,R.color.blue800))
view?.num_day_element?.setBackgroundColor(ContextCompat.getColor(view.context,R.color.blue800))
}
else{
view?.str_day_element?.setTextColor(ContextCompat.getColor(view.context,R.color.gray700))
view?.num_day_element?.setTextColor(ContextCompat.getColor(view.context,R.color.gray700))
view?.str_day_element?.setBackgroundColor(Color.WHITE)
view?.num_day_element?.setBackgroundColor(Color.WHITE)
}
val dayOfWeekInMonth: Int = dateList[position].get(Calendar.DAY_OF_WEEK)
var dayOfWeekInMonthStr = ""
when(dayOfWeekInMonth-1) {
1 -> dayOfWeekInMonthStr = "Пн"
2 -> dayOfWeekInMonthStr = "Вт"
3 -> dayOfWeekInMonthStr = "Ср"
4 -> dayOfWeekInMonthStr = "Чт"
5 -> dayOfWeekInMonthStr = "Пт"
6 -> dayOfWeekInMonthStr = "Сб"
0 -> dayOfWeekInMonthStr = "Вс"
}
view?.str_day_element?.text = dayOfWeekInMonthStr
view?.num_day_element?.text = dateList[position].get(Calendar.DATE).toString()
}
}
init однорядный календарь
fun InitLittleCalendar(){
var date = Calendar.getInstance()
val numDay = date.get(Calendar.DATE).toString()
singleRowCalendar.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
singeRowCalendar.adapter = DateAdapter(GetDaysList(), numDay)
singeRowCalendar.addOnScrollListener(CustomScrollListener())
}
функция для получения списка дат месяца
fun GetDaysList(): List<Calendar> {
val readOnlyView = mutableListOf<Calendar>()
val calendar = Calendar.getInstance()
val days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
var index = 0
while(index < days){
readOnlyView += getDaysPlus(index)
index++
}
return readOnlyView
}
инкрементдень
fun getDaysPlus(daysAgo: Int): Calendar {
val calendar = Calendar.getInstance()
calendar.set(Calendar.DAY_OF_MONTH, 1)
calendar.add(Calendar.DAY_OF_MONTH, +daysAgo)
return calendar
}