1.Activity와 layout을 연결하는 방법 3가지
아무리 xml파일을 작성해주어도 activity파일과 연결되지 않은 xml파일은 껍데기일 뿐이다. xml을 사용하는 클래스에 이벤트를 부여해주어야 비로소 제 기능을 할 수 있다.
첫번째-findViewById 메소드 선언
findViewById 메소드를 선언하면 해당 xml의 요소들을 불러 올 수 있다. xml에 선언한 각 뷰들의 id로 불러오는 것인데 이 id는 xml파일에서 선언해준다.
이 방법에는 단점이 존재한다.
1)느리다:
이 메소드는 ViewGroup 밑에 있는 모든 뷰들을 전부 한번씩 순회하며 id값을 비교한다. 이 ViewGroup이 복잡하면 복잡할수록 작업량이 많아진다.
2)null-safe하지 못하다.:
정의된 id값을 받아야 하는데 이 id값이 현재 보고있는 레이아웃의 id라는 조건이 없다는 점이 문제이다. 프로그램이 복잡해지면 비슷하지만 다른 id를 갖는 뷰들이 많아져 null 값이 할당되는 상황을 발생시킬 수 있다.
두번째-view바인딩
앞선 방식을 대체할 수 있는 방식이다. 안드로이드 버전이 4.0 이상이라면 gradle에 자동적으로 추가 되어 있다.
lateinit var binding : ActivityMainBinding
super.onCreate(savedInstanceState)
binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
다음과 같이 바인딩이 생성되고 inflate(layoutInflater)로 초기화하여 변수에 저장해준다.
setContentView() 메서드를 통해 root뷰를 화면에 표시하도록 설정한다.
레이아웃 파일에 생성해둔 뷰들은 "binding.뷰id" 로 접근할 수 있다.
이 방식은 사용이 간단하고 빠른 컴파일 시간을 보장한다는 장점이 있다.
세번째-data바인딩
xml파일에 data를 바인딩해서 사용한다. 즉 데이터와 뷰를 연결하는 작업을 레이아웃에서 처리한다는 의미이다. 모든 클래스를 바인딩하여 뷰를 직접 참조할 수 있다. 사용방법은 다음과 같다.
binding.tvText.text = "parkho"
이 방식에는 장단점이 있다. 장점으로는 compile-time safty가 보장된다. 양방향 데이터 바인딩을 통해 뷰에서 생성된 값을 뷰 모델에 전달할 수 있다. 단점으로는 layout tag 사용으로 인한 boilerplate code가 발생한다.
( boilerplate code란 여러 곳에서 재사용되며 반복적으로 비슷한 형태를 띄는 코드)
따라서 빌드 시간이 늘어난다.
2.Intent
인텐트는 4대 컴포넌트끼리 유기적으로 정보전달을 가능하게 해주는 기능을 한다. Actity끼리의 이동또한 가능하게 해주는데 이 기능을 해주는 intent에는 명시적 인텐트, 암시적 인텐트 이렇게 두가지 종류가 존재한다.
1)명시적 인텐트
명시적 인텐트는 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우에 사용한다. 주로 애플리케이션 내부에서 사용된다. 의도가 명확할 경우에 사용한다.
val intent - Intent(this, SubActivity::class.java)
startActivity(intent)
다음과 같이 작성하면 ActiviyManager는 저 인텐트를 해석하여 SubActivity를 실행하게 된다.
2)암시적 인텐트
암시적 인텐트는 클래스명이나 패키지 명을 넣어주지 않는다. 대신 인텐트 필터 정보를 활용한다. intent-filter란 매니패스트 파일에 정의되어 있다. intent-filter정보에 맞춰 실행해주면 알맞은 액티비티를 찾아서 실행해준다. intent-filter에 들어갈 수 있는 속성으로는 <action>-컴포넌트의 능력을 표현하는 문자열,<category>-컴포넌트가 어느 범주에 포함되어야 하는지의 문자열,<data>-컴포넌트에서 필요한 데이터 정보 가 있다. 다른 앱의 activity화면도 불러올 수 있다는 장점이 있다.
2.기존 앱 화면 xml파일로 작성하기
'Frontend > Kotlin' 카테고리의 다른 글
Unit 5 (0) | 2023.01.10 |
---|---|
RecyclerView구현 (0) | 2022.12.09 |
Unit 3 solution (0) | 2022.11.20 |
unit 3 강의 정리 (0) | 2022.11.16 |
1주차-Solution (0) | 2022.11.07 |