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 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 = 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() { // member private val row = 7 // input abstract fun bindDateViewHolder(holder: RecyclerView.ViewHolder, bean: CalendarBean) abstract fun bindCalendarViewHolder(holder: RecyclerView.ViewHolder, listBeans: List) // 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) } }