[Android] RecyclerView

zxcmnb05·2021년 5월 2일
9

Android

목록 보기
1/1
post-thumbnail

RecyclerView

Recyclerview는 ListView보다 효율성이 좋다. 그 이유는 RecyclerView의 재활용성 때문이다.
ListView는 Item 하나 하나 마다 한개의 View를 생성하는 반면에 RecyclerView는 사용한 View를 재활용하기 때문에 ListView보다 효율성이 더 좋다고 할 수 있다.

RecyclerView 사용 방법

gradle에 Implement추가하기

implementation {
    implementation "androidx.recyclerview:recyclerview:1.1.0"
    implementation "androidx.recyclerview:recyclerview-selection:1.1.0"
}

data class 추가하기

data.kt

data class nameData(val name: String, val age: Int)

Item 레이아웃에 들어갈 데이터들을 추가해준다.

레이아웃에 RecyclerView 추가하기

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</androidx.constraintlayout.widget.ConstraintLayout>

사용할 RecyclerView를 xml에서 추가한다.

Item 생성하기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/name_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:layout_margin="10dp"/>

    <TextView
        android:id="@+id/age_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:layout_margin="10dp"/>

</LinearLayout>

RecyclerView에 들어갈 ItemView를 만들어준다.

Adapter 생성하기

class Adapter(private val data: ArrayList<NameItem>) : RecyclerView.Adapter<Adapter.ViewHolder>() {

    class ViewHolder(view: View): RecyclerView.ViewHolder(view){
        val nameTextView: TextView = view.findViewById(R.id.name_tv)
        val ageTextView: TextView = view.findViewById(R.id.age_tv)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.name_item, parent, false)

        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.nameTextView.text = data[position].name
        holder.ageTextView.text = data[position].age
    }

    override fun getItemCount(): Int = data.size
}

getItemCount
아이템의 총개수를 몇 개인지 확인 해준다.

onCreateViewHolder
화면을 로딩하였을때 만들어진 View가 없다면 itemView를 inflate후 ViewHolder에 return 하는 함수이다.

onBindViewHolder
생성된 ViewHolder에 전달받은 position에 데이터들을 연결해주는 함수이다.

ViewHolder
화면에서 표시될 아이템 뷰들을 저장하는 객체이다.

Adapter 설정하기

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.recyclerview)
        val adapter = Adapter(name)
        recyclerView.adapter = adapter

        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.hasFixedSize()
}

adapter 연결
데이터 리스트로부터 아이템 뷰를 만든다.

LayoutManager
RecyclerView에 ItemView기 배치되는 형태를 관리하기위한 요소를 제공한다.

Item값 넣어주기

var name = arrayListOf(
        NameItem("Chris", 18),
        NameItem("Hello", 19),
        NameItem("Noah", 38),
        NameItem("Olivia", 14),
        NameItem("Liam", 63),
        NameItem("Sophia", 42),
        NameItem("Peter",61),
        NameItem("Ella", 83),
        NameItem("Mia", 41),
        NameItem("Gabriel", 36),
        NameItem("Mason", 34)
    )

위의 코드로는 name List에 들어간 값이 없기 때문에 item이 나오지 않기 때문에 List에 값을 넣어야 값이 나옵니다

profile
안드로이드 개발&공부중인 DGSW5기

관심 있을 만한 포스트

0개의 댓글