account/app/src/main/java/com/example/accountbook/calendar/CalendarViewPagerAdapter.kt

79 lines
2.8 KiB
Kotlin
Raw Normal View History

2024-11-26 15:35:54 +09:00
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)
}
}