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

두개의 프래그먼트 사이 동작을 주고 받는법 알려주세요

0 추천
안녕하세요 얼마 전에 앱 개발을 처음부터 시작한 왕초보입니다

먼저 바텀내비게이션뷰로 카톡처럼 아래에 두개의 버튼을 만들었습니다

그리고 프래그먼트 두개를 만들어서 두 화면을 만들고 양쪽에 토글버튼을 하나씩 만들었습니다

지금까지 웬만한건 다 구글 검색으로 어찌 해서 잘 작동하는데요

제가 하고 싶은건 프래그먼트A에서 토글버튼을 눌러 ON으로 한 상태에서

프래그먼트B에서의 토글버튼을 눌러 ON으로 만들면 프래그먼트A의 토글버튼을 OFF로 만드는 것입니다

근데 프래그먼트B의 토글버튼이 접근이 안되는지 작동이 안됩니다

검색에서 나오는 정보들은 다 프래그먼트의 ID나 태그를 써서 접근하는데

저는 바텀내비게이션바를 써서 그 방법을 못 쓰는 것 같습니다

제발 살려주세요
hkion159 (120 포인트) 님이 2020년 5월 23일 질문
hkion159님이 2020년 5월 23일 수정

1개의 답변

0 추천

몇가지 방법이 있을 수 있는데, 님이 사용하는 앱 아키텍쳐에 따라 솔루션이 달라질 수 있습니다.

코틀린과 Jetpack 을 사용하신다면 FragmentKtx를 사용하셔서 데이터를 공유하실 수 있습니다.

https://developer.android.com/kotlin/ktx

activityViewModels()를 통해 같은 ViewModel을 사용할 수 있습니다.
 
FragmentKtx를 사용하실 수 없더라도 Jektpack ViewModel을 상요하실 수 있다면, Activity에 ViewModel를 생성하고 이 ViewModel를 프레그먼트에서 공유해서 사용하실 수 있겠죠.
 
interface ActivityListener {
      fun findViewModel(): MyViewModel
}

class ParentActivity: ActivityListener {
     private val viewModel: MyViewModel ...

     override fun findViewModel(): MyViewModel {
          return viewModel
     }

}

class FragmentA {
    private var sharedViewModel: MyViewModel? =  null
     override fun onAttach(context: Context) {
           (context as? ActivityListener)?.apply {
                  sharedViewModel = findViewModel()
           }
     }     
}

 

 
 
다른 방법으로는 Fragment API를 사용하시면  프레그먼트 간에 메세지를 주고받을 수 있습니다.
RxJava 를 사용하신다면 PublishSubject를 이용하여 메세지 교환이 가능합니다.
 
익명사용자 님이 2020년 5월 26일 답변
...