79 lines
2.8 KiB
Kotlin
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)
|
|
}
|
|
}
|