Kotlin 기초#9 Fragment

안녕하세요 조금은 오랜만이겠네요.
오늘은 Fragment에 대해 다룰예정입니다. 앱개발자라면 당연히 아시겠지만,
기초가 중요하다는거 다들 아시죠? 오늘은 기초부터 파헤쳐 봅시다!

💕 1. Fragment 쉽게 이해하자.

하나의 Activty는 Lifecycle구조를 가지고 있습니다.
저는 오늘 카카오톡을 배포하기로 했습니다.

왼쪽 레이아웃 -> 카카오톡 대화창
오른쪽 레이아웃 -> 카카오톡 쇼핑창
Tablet은 화면이 크기 때문에 이것이 가능했습니다.😁😁

하지만 화면이 작은 핸드폰 같은 경우, 따로 보여줘만합니다.

이럴때 Activity를 나누는게 아니라 따로 분리해서 다룬다면 어떨까요?
레이아웃 1 -> 카카오톡 대화창
레이아웃 2 -> 카카오톡 쇼핑창

이걸 테블릿 사이즈에선 붙여버리는겁니다. 그러면 중복된 레이아웃을 만들지 않아도 되겠네요.

이렇게 Fragment는 탄생했습니다.

🚀 2. Fragment 넣기

일단 Activity에서 확인하겠습니다.

//바인딩 작성
val binding by lazy{ActivityMainBinding.inflate(layoutInflater)
val listFragment by lazy{ListFragment()}
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
		setFragment()
    }
    
    fun setFragment(){
    	// 1. 사용할 프래그먼트 생성
        listFragment = ListFragment()
    	// 2. 트랜잭션 생성
        val transaction = suppotFragmentManager.beginTransaction()
        // 3. 트랜잭션을 통해 프래그먼트 삽입
        transaction.add(R.id.frameLayout, listFragment)
        //detail이라는 이름으로 스택이 쌓인다. 
        transaction.addToBackStack("detail")
        transaction.commit()
   
	}

🧇 3. Fragment 생성

Fragment에서 메인 액티비티에 닿을수 있다.

class DetailFragment : Fragment() {

    lateinit var mainActivity: MainActivity
    lateinit var binding: FragmentDetailBinding
    
   //fragment에서 mainActivity에 닿는 방법
    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is MainActivity) mainActivity = context

    }

	//바인딩을 사용했을때 맵핑하는 방법이다.
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.btnback.setOnClickListener() {
            mainActivity.goBack()
        }
    }
}

🍳 4. Fragment 지우기

BackStack을 추가했을경우, 뒤로가기를 하면 현재의 Fragment는 사라집니다.
가령 버튼으로 이렇게 넣을수도 있습니다.

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        binding.btnnext.setOnClickListener() {
            onBackPressed()
        }
    }

좋은 웹페이지 즐겨찾기