안녕하세요. 훈츠 입니다. 안드로이드 정말 많이 사용되어 지는 리싸이클러 뷰를 3회에 걸처 정리 포스팅 합니다.
리싸이클러 뷰(recyclerView) : RecyclerViewAdpter = UserAdapter (UserViewModel , ContainerView)
스피너와 다르게, Adapter와 ViewHolder를 직접 구현해 줘야 합니다.
순 서
- RecyclerView download 버튼 이용, 혹은 dependency 추가
- RecyclerView drag and drop to Activity
- RecyclerView ID 할당
- RecyclerView 에 표시할 itemView.xml 만들고 item에 ID 할당 (자체에 ID 할당은 필요 없음)
- Data Class 만들기
- Data View Holder Class 만들기
- Data Adapter class 만들기
- MainActivity 에서 Recycler 연결
- RecycerView.Adpater = DataAdapter (dataArray)
- RecyclerView.layoutManager = LinerLayoutManager( context )
코드 공유
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//훈스 블로그---------------------------------------------------------------------------------------------------코드//
class FoodModle (val name:String, val price:String)
class FoodDataViewHolder (override val containerView: View):RecyclerView.ViewHolder(containerView)
,LayoutContainer
class FoodAdapter (val list:List<FoodModle>) : RecyclerView.Adapter<FoodDataViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodDataViewHolder {
return FoodDataViewHolder(view)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: FoodDataViewHolder, position: Int) {
list[position].run{
}
}
}
class MainActivity : AppCompatActivity() {
val datalist = listOf(FoodModle("김치찌개","7000")
,FoodModle("된장찌개","7000"),FoodModle("고추장김치찌개","8000"),
FoodModle("두부찌개","8500"),FoodModle("감자찌개","9000"))
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val adpter = FoodAdapter(datalist)
recyclerView.adapter= adpter
recyclerView.layoutManager = LinearLayoutManager(this)
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
RecyclerView 는 ID 할당
item_view 는 ID 할당 필요 없습니다.
RecyclerView 해체 해보기
DataViewHolder : 개별 아이템의 View를 생성하여 제공
class DataViewHolder(override containerViewHolder:View) : RecyclerView.ViewHolder.LayoutContainer
-
LayoutContainer 인터페이스를 상속 받습니다.
-
implement as constructor parameters 자동완성을 통해 인터페이스에 정의되어 있는 containerView 속성을 받도록 생성자를 만들어주되 뒤에 물음표를 제거하여 null을 허용하지 않도록 합니다.
-
RecyclerView 생성자에 받아온 containerView 를 그대로 넘겨 줍니다.
RecyclerViewAdpater : 데이터를 관리하고 목록에 표시
※ onCreateViewHolder( ) : xml 파일을 '실제 View 객체' 로 만드는 inflate 함수
- 새로운 ViewHolder를 생성하는 onCreateViewHolder
- val view = LayoutInflater.from(parent.context).inflate( '1:' 아이템.xml, '2:' parent, '3:' false )
- 1 매개 변수: 아이템.xml 을 parent 에 붙이는 곳
- 2 매개 변수: xml 을 view의 값으로
- 3 매개 변수: 생성만 해두고 원할때 붙일 것인냐를 결정하는 것입니다.
- RecyclerView는 알아서 붙여주기 때문에 'false' 를 주면 됩니다.
- return DataViewHolder(view)
※ getItemCount ( ) : item의 갯수를 반환 하는 함수
- 생성자에서 받은 list 의 아이템 개수를 count() 함수로 받아 반환해줍니다.
※ onBindViewHolder( ) : 이미 생성된 viewHolder 가 화면에 표시될 때, 실제 데이터를 바인딩 해주는 함수
-
onBindViewHolder( '1:' holder : DataViewHolder, '2:' position :Int)
-
1 매개 변수: 패러미터로 화면에 표시할 ViewHolder 객체
-
2 매개 변수: 몇번째 데이터를 표시해야 하는지가 들어옵니다.
-
holder.containerView.(View의 id)
-
containerView를 통해 아이템 레이아웃의 내용을 id로 참조하여 직접 변경 할수 있습니다.
-
containerView.name = list[position].name 으로 연결 해줍니다.
-
RecyclerView.Adapter 연결과 RecyclerView.layoutManager 를 설정
※ RecyclerView.Adapter = UserDataAdapter( list )
-
User가 만든 DataAdapter 를 RecyclerView.adapter 에 연결해 줍니다.
※ RecyclerView.layoutManager = LinearLayoutManager ( context )
-
RecyclerView 를 어떻게 보여줄것 인지, LayoutManager 에 설정 값을 할당 합니다.
- LinearLayoutManager , GridLayoutManager
'안드로이드 프로그래밍[Kotiln Code] > 안드로이드 초기 강좌' 카테고리의 다른 글
[안드로이드] 리싸이클러뷰 3 ( 클릭 리스너 등록하기) (0) | 2020.04.13 |
---|---|
[안드로이드] 리싸이클러뷰 2 ( 레이아웃 Manager ) (0) | 2020.04.10 |
[안드로이드] 스피너3 (콤보박스) with Mutable list (0) | 2020.04.09 |
[안드로이드] 스피너2 (콤보박스) with 모델클래스 (0) | 2020.04.09 |
[안드로이드] 스피너 (콤보박스) (0) | 2020.04.09 |