ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개인 과제 트러블 슈팅(프래그먼트 트랜잭션)
    Android 2024. 4. 22. 21:05

     

    해결 전(이미지 검색 클릭 시 리스트 안보임 + 하트 취소됨)

    해결 코드 전

     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(binding.root)
    
            setFragment(SearchFragment()) // fragment 방식을 replace 와 add 비교해서 다음엔 add 적용해보기
    
            binding.apply {
                btnSearch.setOnClickListener {
                    setFragment(SearchFragment())
                }
                btnStore.setOnClickListener {
                    val fragment = StoreFragment.newInstance(selectedImageList)
                    setFragment(fragment)
                }
            }
        }
        
    private fun setFragment(fragment:Fragment) {
            supportFragmentManager.commit {
                replace(R.id.frameLayout,fragment)
                setReorderingAllowed(true)
                addToBackStack("")
            }
        }

    해결 후 - 이미지 검색 버튼 클릭 시 가장 최근 기록 보임 + 하트 눌린거 그대로

    해결 코드 후

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            Log.d("MainActivity","onCreate")
            setContentView(binding.root)
    
            supportFragmentManager.beginTransaction()
                .setReorderingAllowed(true)
                .add(R.id.frameLayout,searchFragment) // 어짜피 onCreate는 한번만 실행되니까 add 를 쓰자!
                .commit()
    
            binding.apply {
                btnSearch.setOnClickListener {
                    supportFragmentManager.beginTransaction()
                        .setReorderingAllowed(true)
                        .addToBackStack(null)
                        .remove(storeFragment) // remove를 한 이유: 보관함 프래그먼트는 계속 업데이트 되어야 하니까 + hide를 하면 add할때 계속 프래그먼트 쌓임
                        .show(searchFragment) // 핵심코드!
                        .commit()
                }
    
                btnStore.setOnClickListener {
                    supportFragmentManager.beginTransaction()
                        .setReorderingAllowed(true)
                        .addToBackStack(null)
                        .hide(searchFragment)
                        .add(R.id.frameLayout,storeFragment)
                        .commit()
                }
            }
        }

     

    결론

    Fragment 트랜잭션에서 hide, remove, replace 등의 차이를 정확히 알고 있어야 한다.

    'Android' 카테고리의 다른 글

    다이얼로그  (0) 2024.04.25
    프래그먼트 생명주기  (0) 2024.04.24
    Fragment 3가지 데이터 전달 방식  (0) 2024.04.19
    [Android] RecyclerView  (0) 2024.04.15
    [과제] 스탠다드반 3주차 특별과제 정리  (0) 2024.04.12
Designed by Tistory.