발견록_1

김재현·2023년 4월 17일
0

안드로이드

목록 보기
3/12

1. 프래그먼트 만들기


다음과 같이 빈 프래그먼트를 만들면
요상한 코드들이 만들어져있는 파일이 만들어지고 layout에도 만들어지나? 싶다.


2. Navigation 사용하기

코틀린 3강 - 앱 만들기
에서 Navigation을 사용하는데 버전이 이전 버전이라서 deprecated된것이 많은것 같다. 어찌저찌 실행은 하고 있는데 올바른 방식인지는 잘 모르겠다.

  1. MainActivity에서 activity_main.xml에 적어준 프래그먼트의 id인 nav_host_fragment를 인식시켜서 화면에 보이게 하기영상에선 검은색 코드화면같이 nav_host_fragment를 그냥 지정했는데 아무리 해도 나오지 않아서 아래의 코드와 같이 실행했다.
    navController는 프로퍼티 위치에 lateinit으로 지연 초기화 시킨것은 같다.

  2. MainFragment.kt에서 버튼 인식시켜서 다음 프래그먼트로 이동하기

  • 이미 nav_graph.xml을 통해서 프래그먼트가 어떻게 이동하는지는 설정이 되어있으니 navigate를 시켜서 동작만 하게 하면 되는것 같다. 그런데 fragment_main.xml에 등록해둔 ImageView의 id인 btn_next를 불러와서 누르는 방법이 다르다.
    navController는 이전과 같이 지연 초기화 시켰는데 문제는 btn_next를 받아올때 다음과 같이 선언하면 받아와 지는거 같은데 이건 안드로이드 스튜디오 3.0.0이후부터는 deprecated되어서 쓸 수가 없다.
    • 해결책으로써 뷰바인딩이나 데이터바인딩을 사용하는것 같은데 뷰바인딩을 사용해보았다.
      다음과 같이 binding을 사용하여 btn_next를 btnNext로 받아오고 OnClickListner를 받아올 수 있다. 문제는 onViewCreated말고도 onCreateView에 binding을 주어야 한다는 점이다. 다음과 같이 뷰바인딩 하는 root를 주어야 하나보다.
  1. 버튼이 여러개일때 setOnnClickListner를 여러번 반복해서 여러번 쓰는 것 보다는 interface를 상속해서 재정의 하는게 좋을 것 같다.
    인터페이스를 상속받고 onClick()을 재정의하면 when문을 통해서 뭐가 눌렸을때를 적어줄수 있다. 그 후 버튼이 눌렸을때 setOnClickListner에는 this를 줘서 객체가 정의한 onClick()이 실행되게 한다.

  2. navigate에는 bundle객체를 줘서 데이터를 다음 프래그먼트에 전달해줄 수 있다.번들을 받을 때는 arguments?.getInt(키)형식으로 받을 수 있다. value의 형식에 따라 getInt, getString, 등등이 있다. blank형식의 프래그먼트를 받을 때 onCreate()에 자동으로 만들어지는것 같다.


3. 프래그먼트 동적 제어

프래그먼트를 만들었을때 기본으로 만든다면 onCreateView()를 제어해줘야한다.그리고 프래그먼트를 만들었다면 Activity나 다른곳에서 제어를 할 수 있다. 이때 supportFragmentManager.beginTransaction() 안에 있는 함수들 중 add, replace, remove를 사용한 후 commit()을 해줘야 한다.


4. Intent


Intent()에 인자로 다음 액티비티의 클래스 정보를 주고 startActivity()매개변수로 그 정보를 넘겨주면 화면 전환은 쉽게 되나보다.

profile
배운거 정리하기

0개의 댓글