반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[Android] View3 - Adapter 본문
반응형
Adapter
- recycler view는 무조건 adapter를 만들어서 사용해야 한다.
- adapter class 상속 받아서 오버라이딩 해서 adapter를 custom해서 만들어 사용할 수 있다.
Base Adapter
- tag : 사용자한테 view에다가 어떠한 객체를 저장할 때 사용하라고 제공하는 것
- 각 항목(view)마다 그 항목을 관리하는 view binding이 해당 항목(view) 자체에 저장되어 있어야 한다. : 어떠한 view binding 객체를 통해 접근 할 거기 때문에 새로운 view를 만들 때마다 view에 해당 view를 관리하고 있는 viewBinding 객체를 추출해서 저장해서 해당 view에 접근할 수 있도록 해야한다.
- 사라진 view들은 pool에 있는 데 재사용 할 때도 view Binding 을 사용해야 하기 때문에 해당 view의 경우도 view binding 객체를 가지고 있다.
- 재사용 : 스크롤 하면 보였던 항목이 사라지면서 안보여서 안써도 되는 항목이 된다. 하지만 새로운 항목이 나타나면서 해당 항목을 위해서 재사용한다. 보이지 않게 된 항목에 맞춰 전에 설정한 게 남아있기 때문에 이를 보이게 된 새로운 항목에 맞춰서 다시 설정하기 위해서 view Binding이 필요하다
메서드
- getCount() : 리스트 뷰의 row(항목)의 개수를 결정하는 메서드, 반환하는 만큼 row(항목) 생성
- getView()
- 매개변수
- position : 구성하고자 하는 row의 순서 값(0부터 1씩 증가)
- convertView : 재사용 가능한 view가 있다면 매개변수로 들어옴(null 허용) : 적은 양의 메모리를 가지고 무한대의 항목을 표현할 수 있다.
- row로 사용할 View를 생성하여 반환하는 메서드, 반환하는 View를 현재 번째의 row로 사용한다.
- 구성 모양이 다르다면 디자인 별로 레이아웃을 만들어서 몇번 째 항목에 따라서 invisible, visible을 이용해 보여주는 것을 설정해서 메모리를 조절해 줄 수 있다. 재사용 가능한 view가 없다면 새로운 view를 만들어줌
- 매개변수
- getItem() : 현재 번째의 row view를 반환하도록 만들어 준다.
- getItemId() : 현재 번째의 row view의 id를 반환하도록 만들어 준다.
Containers
Spinner
- 접을 수 있는 형태의 항목(클릭 시 펼쳐짐)
- setDropDownViewResource(android.R.layout.레이아웃종류) : 펼쳐져 있는 상태 레이아웃 설정
- setSelection(선택 항목 순서 값) : 스피너의 항목 순서 값은 0부터 시작한다.
- selectedItemPosition : 스피너의 선택 항목의 순서 값을 가져온다.
recycler View
- adapter 설정 필수
- recycler view로 다양한 역할을 수행해낼 수 있다.
- layout gravity : 속한 레이아웃에서의 요소의 위치
- adapter에 view(하나의 항목)를 반환해서 받는 메서드가 없다. 대신 view holder를 반환
- viewholder
- viewBinding과 비슷
- holder은 어떠한 값들을 담을 수 있는 변수를 지정해놓고 어디선가 발생된 데이터를 변수에 넣는다.
- holder는 소멸하는 객체들이 가지고 있는 끝까지 가져가야 하는 몇몇 정보들만 보관하고 해당 객체는 날려버린다. 이런 식으로 관리하는 용도로 사용한다.
- 개발자가 쓰고 싶은 view들의 주소 값(아이디)만 가지고 작업할 수 있다.
- 행 하나를 만들게 되면 행 하나에 여러가지 뷰들의 객체 아이디를 가지고 있는 holder가 만들어진다. 개발자는 그 holder를 사용해서 view객체에 접근한다.
- list view와 recycler view
- listView는 pool을 관리, adapter은 listview에 속한 항목(행) 생성, view에 접근해서 작업
- recycler view는 pool에 속한 항목 관리, adapter는 항목 생성 뿐만 아니라 holder 관리 기능도 있다, holder들은 항목 하나에 사용되는 view들에 직접적으로 접근 할 수 있는 view의 아이디(혹은 주소 값)를 관리한다. holder 안 아이디에 접근해서 작업
- recycler view에는 getItemView, getItemID 없다.
- recycler view가 listView 보다 효율적인 이유 : listView에 비해 단순화되어 있어 속도적인 면과 메모리적인 면에서 더 효율적이다. 더 적은 처리로 더 많은 것을 할 수 있다. view 재사용 관련한 기능 다 구현해놓아서 holder 관련된 작업만 신경쓰면 돼서 좋다.
- list View의 경우 행 안에 들어있는 뷰에 접근할 때 접근 할 수 있는 곳이 정해져 있어 항상 그곳안에서만 접근 해야 한다. recycler view는 holder가 있기 때문에 행에 접근하는 것이 아닌 원하는 객체의 holder의 순서만 가져와서 작업하면 된다.
- recycler view의 adapter 만드는 순서
- 아무것도 상속받지 않은 클래스를 만들어준다.
- ViewHolder 클래스를 상속 받아 custom view holder 클래스 mainActivity 안 어댑터 클래스 안 inner 클래스로 생성
- AdapterClass를 RecyclerView.Adapter를 상속받게 한다.
- 필요한 메서드들을 구현한다.
inner class RecyclerAdapterClass :RecyclerView.Adapter<RecyclerAdapterClass.ViewHolderClass>() {
inner class ViewHolderClass(itemView : View) : RecyclerView.ViewHolder(itemView){
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
TODO("Not yet implemented")
}
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
TODO("Not yet implemented")
}
}
- ViewHolderClass
- recycler view가 만들어지는 원리 : 저장한 viewBinding을 tag를 통해 가져와 사용해야지 listView에서 처리를 할 수 있었다. list view에서 작업할 때 viewBinding을 view에 저장해놨다가 쓰는 것이 recycler view와 비슷하다
ETC
- editText.setText = 우리가 셋팅한 문자열은 editable한 문자열로 변경해서 저장하는 메서드가 내부에 있다.
'Android' 카테고리의 다른 글
[Android] Menu & Activity (0) | 2023.06.16 |
---|---|
[Android] 권한 (0) | 2023.06.15 |
[Android] UI 요소 - View 2 (0) | 2023.06.14 |
[Android] Compound Component (0) | 2023.06.12 |
[Android] UI 요소 - View (0) | 2023.06.11 |
Comments