account/app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt
2024-11-26 15:35:54 +09:00

79 lines
2.8 KiB
Kotlin

package com.example.accountbook.calendar
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.example.accountbook.MainActivity
import com.example.accountbook.R
import com.example.accountbook.fragment.FragCalI1
import com.example.accountbook.fragment.FragmentCalendar
import java.util.Date
//abstract
abstract class CalendarViewFragmentAdapter(activity: AppCompatActivity): FragmentStateAdapter(activity) {
private lateinit var calendarData: List<CalendarBean>
override fun createFragment(position: Int): Fragment {
return getFragment().setCalendarData(this.getCalendarData(position))
}
override fun getItemCount(): Int
= Int.MAX_VALUE
protected fun getCalendarData(position: Int): List<CalendarBean>
= CalendarUtil.getYMD(Date()).run {
return CalendarFactory.getMonthOfDayList(
this[0],
this[1] + position - Int.MAX_VALUE / 2
)
}
abstract fun getFragment(): FragmentCalendar
}
abstract class CalendarViewPagerAdapter (val pageView: View, val calendarView: RecyclerView, val dateItemView: View, val context: Context): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
// member
private val row = 7
// input
abstract fun bindDateViewHolder(holder: RecyclerView.ViewHolder, bean: CalendarBean)
abstract fun bindCalendarViewHolder(holder: RecyclerView.ViewHolder, listBeans: List<CalendarBean>)
// view Holder
class PageViewHolder(view: View): RecyclerView.ViewHolder(view)
// extension RecyclerView Adapter
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
= PageViewHolder(pageView)
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
// calendar date
val dateArr: IntArray = CalendarUtil.getYMD(Date())
val data = CalendarFactory.getMonthOfDayList(
dateArr[0],
dateArr[1] + position - Int.MAX_VALUE / 2
)
// etc
bindCalendarViewHolder(holder, data)
// val isToday: Boolean = position == Int.MAX_VALUE / 2
calendarView.adapter = object : CalendarAdapter2(dateItemView, data) {
override fun bindViewHolder(holder: CalendarAdapter2.ViewHolderCalendar2, bean: CalendarBean) {
// 날짜 뷰
bindDateViewHolder(holder, bean)
}
}
calendarView.layoutManager = GridLayoutManager(context, row)
}
}