안드로이드 프로그래밍[Kotiln Code]/안드로이드 초기 강좌

[안드로이드] 리싸이클러뷰 1

훈츠 2020. 4. 10. 17:12
반응형

안녕하세요. 훈츠 입니다. 안드로이드 정말 많이 사용되어 지는 리싸이클러 뷰를 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:Stringval 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{
            holder.containerView.name.text = name
            holder.containerView.price.text = price+ "원"
        }
    }
}
 
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

 

 

 

반응형