[개발 일지]
코틀린으로 일정 관리 앱을 개발 중이었다.
4가지 기능이 필요했다.
1. 달력의 한 날짜를 클릭하면 그와 관련된 slide view를 다른 class에서 처리하도록 하기
2. slide view의 내부 view 들을 그려주기
3. view all goals 클릭 시 view pager의 2번째 탭(1번 인덱스)로 이동,
4. add routine 클릭 시 view pager의 3번째 탭(2번 인덱스)로 이동
[Slide View를 나타낼 CalendarSlider 생성]
class CalendarSlider(
slideLayout: SlideLayoutCalendarBinding,
private val mainActivity: MainActivity
)
CalendarSlider은 2가지 value-parameter를 받는다.
slideLayout은 아래와 같이 해당 일에 대한 일정 관리 layout이다.
해당 layout을 넘겨줘서 view를 그릴 수 있게 해준다.
mainActivity도 넘겨주는데 viewpager에 접근하려면 fragment들을 관리하는
mainActivity를 통해 선언 된 viewpager에 접근할 수 있게 해준다.
[sldie view 구성요소 불러오기]
private val topTextView = slideLayout.todoTopText
private val editTypingView = slideLayout.todoEditText
private val addButton = slideLayout.todoAddButton
private val goAllGoalsButton = slideLayout.todoViewAllGoals
private val goAddRoutineButton = slideLayout.todoAddRoutine
private val recentlyListRecycler = slideLayout.todoRecentlyList
위에 있는 slide layout에 속해있는 view들을 선언해준다.
뷰를 그리거나 버튼 클릭에 대한 이벤트를 처리할 수 있다.
뷰를 그려줄 (초기화 해줄) initView를 만들어준다.
fun initView(dateTime: String,day: String){
val topText = dateTime+" "+ day + "일 일정"
topTextView.text = topText
}
외부에서 initView를 통해서 뷰들을 초기화 해줄 수 있다.
우선 상단의 "xx년 xx월 x일 일정" 만 그려주었다.
외부에서 dateTime (년도, 월) , day (일)을 받아온다.
[view all goals, add routine 버튼 클릭 이벤트 처리하기]
[Fragment에서 Activity view pager 변경]
버튼 클릭 이벤트를 처리하기 위한 setUpListner를 만들어준다.
fun setUpListener(){
goAllGoalsButton.setOnClickListener {
mainActivity.viewPager.currentItem= 1
}
goAddRoutineButton.setOnClickListener {
mainActivity.viewPager.currentItem = 2
}
}
앞의 3,4 번 기능을 구현했다.
버튼을 클릭 시 mainActivity의 viewPager를 조작할 수 있다.
viewPager.currentItem
viewPager에서 인덱스에 해당하는 fragment로 이동하는 동작을 currentItem을 통해서 할 수 있다.
방법은 fragment에 해당하는 인덱스로 이동하면 된다.
[클래스 사용하기]
CalendarSlider에 넘겨줄 slideLayout을 선언한다. (binding 내부의 slide Layout)
이 후에 앞에서 구현한 initView()와 setUpListener()을 실행
val slideLayout = binding.slideLayout
val calendarSlider = CalendarSlider(slideLayout,mainActivity)
calendarSlider.initView(dateTime,day)
calendarSlider.setUpListener()