ListView의 개선형으로 ViewHolder를 포함하고 있고 ListView보다 더 유연하다.

1. build.gradle(module)에 아래 패키지를 포함시킨다.

dependencies { 	... 	implementation "androidx.recyclerview:recyclerview:1.1.0" }

 

2. ListView와 마찬가지로, 표현하려는 객체List를 준비하고, view xml에는 <androidx.recyclerview.widget.RecyclerView> 컴포넌트를 생성하고 id를 부여한다.

<androidx.recyclerview.widget.RecyclerView         android:id="@+id/recyclerView"         android:layout_width="match_parent"         android:layout_height="match_parent"         > </androidx.recyclerview.widget.RecyclerView>

 

3. RecyclerView.Adapter를 상속하는 Adapter를 구현한다.

Adapter 안에는 inner class로 Holder를 포함해서 구현한다.

Holder는 표현할 객체의 속성을 갖도록 한다.

 

class RecyclerViewAdapter(     val itemList: ArrayList<CarForList>     ,val inflater: LayoutInflater ): RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>(){  		// 내부에 Holder 클래스를 포함한다. 		// Holder는 RecyclerView.ViewHolder 클래스를 상속한다. 		// 인자로는 view를 전달 받는다.     inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {         val carName: TextView         val carEngine: TextView          init {             carName = itemView.findViewById(R.id.car_name)             carEngine = itemView.findViewById(R.id.car_engine)              itemView.setOnClickListener {                 //Adapter 안에 inner class에서 adapterPosition 필드에 접근이 가능하다.                 val position = adapterPosition                 //inner 클래스로 선언된 경우에만 outer 클래스의 필드에 접근이 가능해진다.                 val carName = itemList.get(position).name                 val carEngine = itemList.get(position).engine             }         }     }      override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {         val view = inflater.inflate(R.layout.item_view, parent, false)         return ViewHolder(view)     }      override fun getItemCount(): Int {         return itemList.size     }      override fun onBindViewHolder(holder: ViewHolder, position: Int) {         holder.carName.setText(itemList.get(position).name)         holder.carEngine.setText(itemList.get(position).engine)     } }

 

4. 객체 List를 전달해서 adapter 인스턴스를 생성하고, <RecyclerView> 컴포넌트에 주입한다.

val adapter = RecyclerViewAdapter(carList, LayoutInflater.from(this@RecyclerViewActivity)) val recyclerView = findViewById<RecyclerView>(R.id.recyclerView) recyclerView.adapter = adapter

 

5. recyclerView 객체에 필요한(Linear, Grid 등) LayoutManager를 삽입하면 view가 생성된다.

recyclerView.layoutManager = LinearLayoutManager(this@RecyclerViewActivity) //recyclerView.layoutManager = GridLayoutManager(this@RecyclerViewActivity, 2)

 

'Android > Android기본' 카테고리의 다른 글

AddView  (0) 2021.11.24
ListView  (0) 2021.11.24
TabLayout, Pager  (0) 2021.11.24
SharedPreference  (0) 2021.11.24
Realm  (0) 2021.11.24

+ Recent posts