[안드로이드 프로그래밍] Fragment

PUJIN·2023년 7월 24일
0

android programming

목록 보기
22/26
post-thumbnail

Fragment


독립된 실행단위가 아닌 화면만 필요한 경우 사용

  • activity : fragment, 데이터 관리 역할



Fragment 구성


  • Fragment에서 동작하는 기능 : onCreateView에 작성

    • binding 객체 설정
class PostListFragment : Fragment() {

    lateinit var mainActivity: MainActivity
    lateinit var fragmentPostListBinding: FragmentPostListBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        mainActivity = activity as MainActivity
        fragmentPostListBinding = FragmentPostListBinding.inflate(inflater)
        
        return fragmentPostListBinding.root
    }
}



Fragment 관리


  • companion object로 fragment 저장
companion object {
	// Activity가 관리할 프래그먼트 이름
	val MAIN_FRAGMENT = "MainFragment"
	val ADD_FRAGMENT = "AddFragment"
	val RESULT_FRAGMENT = "ResultFragment"
}



Fragment 변경

  • activity.xml에 FragmentContainerView 배치
    • Fragment 변경하며 화면전환

replaceFragment(MAIN_FRAGMENT, false, false)



📌 method


  • Fragment 설정 및 변경

    • AddToBackStack : BackStack에 추가
fun replaceFragment(name: String, addToBackStack: Boolean, animate: Boolean) {
	// Fragment 교체 상태로 설정
	val fragmentTransaction = supportFragmentManager.beginTransaction()

	// 새로운 Fragment를 담을 변수
	var newFragment = when (name) {
		MAIN_FRAGMENT -> {
			MainFragment()
 		}

		ADD_FRAGMENT -> {
			AddFragment()
		}

		RESULT_FRAGMENT -> {
			ResultFragment()
		}

		else -> {
			Fragment()
		}
	}

	if (newFragment != null) {
		// Fragment 교체
		fragmentTransaction.replace(R.id.mainContainer, newFragment)

	if (animate == true) {
		// 애니메이션 설정
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
	}

	if (addToBackStack == true) {
		// 이전으로 돌아가는 기능 이용하기 위해 Fragment Backstack에 넣어주기
		fragmentTransaction.addToBackStack(name)
	}

	// 교체 명령 동작
	fragmentTransaction.commit()
	}
}

  • Fragment 제거

    • popBackStack : Fragment를 BackStack에서 제거
      • Fragment가 BackStack에 추가된 경우 BackStack에서 제거하여 이전 화면으로 돌아가는 효과 구현 가능
fun removeFragment(name: String) {
	supportFragmentManager.popBackStack(name, 0)
}

method 사용 방법

mainActivity.removeFragment(JOIN_FRAGMENT)
mainActivity.replaceFragment(ADD_USER_INFO_FRAGMENT,true,null)

0개의 댓글