코틀린 6주차 WIL
뷰 바인딩 (View Binding)
뷰 바인딩 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다.
모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다.
바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함됩니다.
대부분의 경우 뷰 바인딩이 findViewById를 대체합니다.
findViewById와의 차이점
NullSafe
뷰 바인딩은 뷰의 Direct References 즉 직접 참조를 생성하므로 유효하지 않은 뷰ID로 인해 null포인터 예외(NPE)가 발생 할 위험이 없다.
즉, 레이아웃에 아직 생성되지 않은 뷰의 참조를 얻어(null상태)해당 뷰의 속성을 사용하려 할 때 발생하는 NPE를 방지 한다는 것이다.
레이아웃의 일부 구성에만 뷰가 있는 경우 결합 클래스에서 참조를 포함하는 필드가@Nullable로 표시된다.
Type safety
각 바인딩 클래스에 있는 필드의 유형이 XML파일에서 참조하는 뷰와 일치한다.
즉,클래스 변환 예외가 발생할 위험이 없다.
쉽게말해 타입을 가지고 있기 때문에 imageView.text같이 타입이 다른 경우 발생하는 오류를 방지 할 수 있다.
1. 어댑터 뷰(AdapterView)
어댑터 뷰는 여러개의 항목을 다양한 형식으로 나열하고 선택 할 수 있는 기능을 제공하는뷰
1. 리스트뷰(ListView)는 항목을 수직으로 나열시키는 방식
2. 그리드뷰(GridView)는 항목을 격자 형태로 나열시키는 방식
어댑터 뷰는 표시할 항목 데이터를 직접 관리하지 않고,어댑터라는 객체로부터 공급받습니다.
어댑터 (Adapter)
데이터를 관리하며 데이터 원본과 어댑터뷰(ListView, GridView) 사이의 중계 역할
사용자가 어댑터뷰의 특정 위치의 항목을 선택하였을 때, 어댑터뷰는 선택된 항목, 항목ID, 항목뷰를
어댑터의 getItem(), getItemId(), getView() 메소드를 통해 얻어와서 이를 항목선택 이벤트 처리기에 넘겨줍니다.
어댑터뷰는 어떻게 데이터 항목을 표시할까요?
1. 어댑터뷰가 어댑터를 사용하기 위해서는 먼저 데이터 원본이 어댑터에 설정되어야 하고, 어댑터뷰에는 어댑터가 설정되어야 합니다.
2. 어댑터뷰는 항목을 표시하기 위해서 먼저 표시할 항목의 총 개수를 알 필요가 있을 것입니다. 이 때, 어댑터 뷰는 어댑터의 getCount()란 메소드를 통해 현재 어뎁터가 관리하는 데이터 항목의 총 개수를 반환합니다.
3. 어댑터 뷰는 어댑터의 getView()란 메소드를 통해서 화면에 실제로 표시할 항목뷰를 얻고, 이를 화면에 표시합니다.
어댑터의 종류
1) BaseAdapter
어댑터 클래스의 공통 구현
사용자 정의 어댑터 구현 시 사용
2) ArrayAdapter
객체 배열이나 리소스에 정의된 배열로부터 데이터를 공급받음
3) CursorAdapter
데이터베이스로부터 데이터를 공급받음
4) SimpleAdapter
데이터를 Map(키,값)의 리스트로 관리
데이터를 XML파일에 정의된 뷰에 대응시키는 어댑터
2. 리스트 뷰(ListView)
ListView는 어댑터 뷰의 대표 위젯으로서, 복수 개의 항목을 수직으로 표시
3. 그리드 뷰(GridView)
GridView는 2차원 스크롤 가능한 그리드에 항목을 표시
4. 커스텀 뷰(Custum View)
커스텀 항목뷰 설정 절차
1) 커스텀 항목을 위한 XML 레이아웃 정의
2) 항목 관련 데이터 클래스 정의
3) 어댑터 클래스 정의
4) 메인화면 레이아웃에 ListView 위젯 정의
5) 어댑터를 생성하고 어댑터뷰 객체에 연결
5. 리사이클러 뷰(RecyclerView)
RecyclerView는 한정적인 화면에 많은 데이터를 넣을 수 있는 View입니다.(뷰를 재활용하여 사용)
View를 계속 만드는 ListView의 단점을 보완하기 위해 나왔습니다.
어댑터와 뷰홀더
1) Adapter
어댑터란 데이터 테이블을 목록 형태로 보여주기 위해 사용되는 것으로, 데이터를 다양한 형식의 리스트 형식을 보여주기 위해서 데이터와 RecyclerView 사이에 존재하는 객체이다. 즉 데이터와 RecyclerView 사이의 통신을 위한 연결체이다.
2) ViewHolderViewHolder란 화면에 표시될 데이터나 아이템들을 저장하는 역할, RecyclerView의 개념을 적용하기위해선 스크롤 해서 위로 올라간 View를 재활용하기 위해서 이 View를 기억하고 있어야 합니다. ViewHolder가 그역할을 합니다.
프래그먼트 (Fragment)
액티비티 위에서 동작하는 모듈화된 사용자 인터페이스. 프래그먼트는 액티비티와 분리되어 독립적으로 동작할 수 없음.
여러 개의 프래그먼트를 하나의 액티비티에 조합하여 창이 여러 개인UI를 구축할 수 있으며,하나의 프래그먼트를 여러 액티비티에서 재 사용할 수 있음
액티비티 vs 프래그먼트 비교
1) Activity
시스템의 액티비티 매니저에서 인텐드를 해석해 액티비티간 데이터를 전달
2) Fragment
액티비티 내에서 프래그먼트 매니저가 메소드 호출을 해석해 프래그먼트간 데이터를 전달
Activity로 화면을 계속 넘기는 것보다는 Fragment로 일부만 바꾸는 것이 자원 이용량이 적어 속도가 빠르다.
다이얼로그
다이얼로그는 사용자에게 결정을 내리거나 추가정보를 입력하라는 메시지를 표시하는 작은창입니다.
다이얼로그는 화면을 가득 채우지 않으며 보통은 사용자가 다음으로 계속 진행하기 전에 조치를 취해야 하는 모달 이벤트에 사용됩니다.
다이얼로그의 구조
AlertDialog클래스를 사용하면 여러 가지 대화 상자 디자인을 빌드할 수 있다.
대개 이 다이얼로그 클래스만 있으면 되는 경우가 많습니다.
다이얼로그에는 세 가지 영역이 있습니다. (제목, 콘텐츠 영역, 작업버튼)
1)제목
선택 사항이며 콘텐츠 영역에 상세한 메시지,목록 또는 맞춤 레이아웃이 채워져 있는 경우에만 사용해야합니다.
단순한 메시지 또는 질문을 나타내야 하는 경우 제목은 없어도 됩니다.
2)콘텐츠 영역
메시지,목록 또는 다른 맞춤 레이아웃을 표시 할 수 있습니다.
3)작업 버튼
대화 상자 하나에 작업 버튼이 세 개를 초과하면 안됩니다.
알림 (Notification)
앱의 UI와 별도로 사용자에게 앱과 관련한 정보를 보여주는 기능
알림을 터치하여 해당 앱을 열 수 있다.
보통 단말기 상단 부분에 표시되고, 앱 아이콘의 배지로도 표시
알림 채널
알림 채널은 알림을 그룹하여 알림 활성화나 방식을 변경 할 수 있음.
알림 생성
1). NotificationCompat.Builder 객체에서 알림에 대한 UI정보와 작업을 지정
setSmallIcon() : 작은 아이콘
setContentTitle() : 제목
setContentText() : 세부텍스트
2). NotificationCompat.Builder.build()호출
Notification객체를 반환
3). NotificationManagerCompat.notify()를 호출해서 시스템에 Notification객체를 전달
알림 중요도
긴급 알림음이 울림, 헤드업 알림 표시 IMPORTANCE_HIGH
높음 알림음이 울림 IMPORTANCE_DEFAULT
중간 알림음이 없음IMPORTANCE_LOW
낮음 알림음이 없음, 상태 표시줄에 표시 안됨 IMPORTANCE_MIN