마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

페이지 상태값에 따른 화면의 기능변화를 만들고있는데요

0 추천

페이지 상태 값(sealed class)을 만들고 이에따라 화면의 기능(만들기, 수정)을 달리하는것을 만들고 있는데요,

조금 막힌 부분이 있어서 어떻게하면 좋을지 몰라 질문드립니다.

사진이랑 같이 앱의 흐름을 설명드리겠습니다.

----

먼저 페이지 상태를 나타내려는 Sealed class 입니다.

sealed class PageState(private val e: String) : Parcelable {
    @Parcelize class startWorkout(val name: String) : PageState(name)
    @Parcelize class editWorkout : PageState("")

    companion object {
        lateinit var curPageState: PageState
    }
}

 

첫 화면입니다. 버튼만 나와있지만 여기에 추후에 카드뷰 형식으로 날짜별 운동 목록을 간략한 정보와 함께 나타날 예정입니다.

여기서 운동 시작 버튼을 누르면 WorkoutList화면으로 넘어갑니다.

운동 시작 버튼을 눌렀으니 PageState의 curPageState 값을 startWorkout()으로 바꿔줍니다.

PageState.curPageState = PageState.startWorkout("startWorkout")

 

Tab Fragment와 viewpager2 Fragment 두개의 fragment로 구성된
운동 목록 화면입니다.
여기서 하고자 운동을 선택하면 PageStste 값을 확인해 startWorkout()이면 
다음 상세작성 화면으로 넘어감과 동시에 DB에 오늘 날짜와 운동부위가 담겨있는 정보가
DB에 생성됩니다. 이 생성된 데이터가 앞에서 말한 카드뷰에 뿌려질 데이터들입니다.


「2022.12.23
  등, 이두」

「2022.12.22
  가슴, 삼두」

이런식으로요.

운동 선택을 한뒤 작성해야할 상세 화면입니다.

작성하고 추가버튼(사진에는 나와있지 않습니다)을 누르고 다음 운동운동을 추가하러갑니다.

추가버튼을 누르면 이정보들은 DB에 저장됩니다.

이정보들은 아무데나 저장되는게 아니라 작성한 날에 맞게 저장되어야할것입니다.

(외래키를 사용할 생각입니다.)

상세화면에서 상세 운동 정보를 작성하고 추가한 후 운동을 추가하기전 화면입니다.

여기서는 이전에 상세화면에서 작성한 정보들을 리사이클러뷰를 이용해 텍스트형식으로 뿌려줄생각입니다.

상제 운동정보는 삭제도 될수 있어야하고 수정도 될수 있어야하죠. 그런 기능또한 만들예정입니다.

그리고 루틴 추가버튼을 누르면 위에서 보여드렸던 운동리스트 화면으로 이동하여 같은 작업을 반복하게 될것입니다.

이 화면에서는 아마 DB에 저장하는 기능은 없을것 같습니다. DB에서 불러와서 값을 리사이클러뷰에 뿌려주거나 하는 것은 있어도 아마도(?) 저장할 일은 딱히 없을거같네요.

아무튼 제가 어떻게 해야 좋을지 궁금한것이..

 

1. 

위에서 말씀드렸다시피 운동 시작버튼을 누르고 운동을 선택하면

오늘 날짜와 부위의 데이터가 DB에 생성 되겠죠. 이것을 A라고 칭하겠습니다.

저는 운동을 선택하고 작성하고 추가하는 행위를 이 A라고 하는 곳에 해야합니다.

그런데 A가 만들어 진 이후 하는 반복작업에서 데이터가 넣어야할 곳이 A인걸 어떻게 알 수있을까요?

정확하게는 넣는다기보다는 DB에서 1:N 형식으로 표현할 예정입니다. 

 

일단 반복작업이 운동목록 화면을 거치기때문에 curPageState 값이 계속 유지된다면 운동 목록 화면에서 계속해서 오늘날짜와 부위의 데이터 생성이 될것이기때문에 이 값을 변경해야하나 싶기도하구요..

 

2.

1번 질문의 연장선일수도 있습니다. 하루에 운동을 두번 할수도있습니다.

그렇다면 운동을 추가할 곳이 A인지 다른 곳인지 어떻게 구분할 수 있을까요?

codeslave (3,940 포인트) 님이 2022년 12월 21일 질문
codeslave님이 2022년 12월 21일 수정

1개의 답변

0 추천
1. A가 만들어 진 이후 하는 반복작업에서 데이터가 넣어야할 곳이 A인걸 어떻게 알 수있을까요?
A라는 걸 어딘간에 저장하고 계셔야 겠죠. 화면간의 이동이 되므로 화면간에 A를 전달하거나(argument) ViewModel을 사용한다면 navigation graph 내에서 ViewModel을 공유하고 A를 보관할 수도 있겠죠. 액티비티에 보관하는 방법도 있을 거구요(requireActivity().intent.putExtra). 운동디테일 화면으로 넘어갈 때 A를 전달하면 운동디테일과  A를 같이 보관할 수도 있을 겁니다.

일단 반복작업이 운동목록 화면을 거치기때문에 curPageState 값이 계속 유지된다면 운동 목록 화면에서 계속해서 오늘날짜와 부위의 데이터 생성이 될 것이기때문에 이 값을 변경해야하나 싶기도하구요.
curPageState가 static이므로 사용한 후에 초기화를 해주시는게 안전하겠죠. 아니면 static을 사용하지 말고 1번처럼 처리하시면 됩니다.

2. 하루에 운동을 두번 할수도있습니다. 그렇다면 운동을 추가할 곳이 A인지 다른 곳인지 어떻게 구분할 수 있을까요?
1번과 마찬가지로 처리하면 되지 않을까 생각합니다.
spark (227,470 포인트) 님이 2022년 12월 21일 답변
...