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 |
Uploaded by Notion2Tistory v1.1.0