코틀린 리사이클러뷰 예제



매인액티비티 생성.

MainActivity.kt

//////////////////////////////////////////////////////////////////////////////////////////


class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)


    }

}

//////////////////////////////////////////////////////////////////////////////////////////



Build.gradle(Module:app)에 com.android.support:recyclerview-v7 모듈 추가

//////////////////////////////////////////////////////////////////////////////////////////

dependencies {

    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    implementation 'com.android.support:appcompat-v7:28.0.0'

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

//리사이클러뷰 모듈 추가.

    implementation 'com.android.support:recyclerview-v7:28.0.0'

}

//////////////////////////////////////////////////////////////////////////////////////////


리사이클러뷰에 사용할 데이터 생성.


간단한 데이터 출력 하기위한 클래스 생성.

People.Kt

//////////////////////////////////////////////////////////////////////////////////////////

/**

 * 데이터 클래스 생성 및 초기화

 * 바로 생성자를 넣어서 만들어지게 구현.

 * 코틀린에서는 data class 를 지원 하며

 * java에서 처럼 toString 처리 하지 않아도 됨.

 */

data class People(val name: String, val age: String, val address: String)

//////////////////////////////////////////////////////////////////////////////////////////





리사이클러뷰에 보여줄 row layout 생성.


간단히 name, age, address 보여줌.


listview_row.xml

//////////////////////////////////////////////////////////////////////////////////////////

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="wrap_content">



    <android.support.constraint.ConstraintLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="10dp"

        android:layout_marginTop="10dp"

        android:layout_marginRight="10dp"

        app:layout_constraintTop_toTopOf="parent">



        <TextView

            android:id="@+id/name"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="name"

            app:layout_constraintTop_toTopOf="parent" />


        <TextView

            android:id="@+id/age"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="age"

            app:layout_constraintTop_toBottomOf="@+id/name" />


        <TextView

            android:id="@+id/address"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="address"

            app:layout_constraintTop_toBottomOf="@+id/age" />



    </android.support.constraint.ConstraintLayout>

</android.support.constraint.ConstraintLayout>

//////////////////////////////////////////////////////////////////////////////////////////



뷰홀더 클래스 생성. RecyclerView.ViewHolder 상속

TestHolder_01.kt

//////////////////////////////////////////////////////////////////////////////////////////

/**생성자 지정 , 상위클래스 view 넘겨줌.  super(itemView);*/

class TestHolder_01(itemView: View) : RecyclerView.ViewHolder(itemView) {

    // 뷰 홀더를 상속 받고나면 생성자에서 상위 홀더에 view 를 전달.

    

    

    val name: TextView

    val age: TextView

    val address: TextView

    

    

    /**

     * 코틀린사용한 초기화

     * 초기화 블럭.

     */

    init {

        this.name = itemView.findViewById(R.id.name)

        this.age = itemView.findViewById(R.id.age)

        this.address = itemView.findViewById(R.id.address)

    }


    

    /**팩토리 함수 */

    companion object {

        fun newInstance(viewGroup: ViewGroup): TestHolder_01 {

            val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.listview_row, viewGroup, false)

            return TestHolder_01(view)

        }

    }


    fun onBindView(position: Int, list: ArrayList<People>) {

        // 데이터를 화면에 그리기.

        name.text = list[position].name

        age.text = list[position].age

        address.text = list[position].address

    }

}

//////////////////////////////////////////////////////////////////////////////////////////





리사이클러뷰 아답터 생성.

TestAdapter_01.kt

//////////////////////////////////////////////////////////////////////////////////////////

/**생성자에서 리스트를 받아옴.*/

class TestAdapter_01(val list: ArrayList<People>) : RecyclerView.Adapter<TestHolder_01>() {



    override fun onCreateViewHolder(p0: ViewGroup, p1: Int): TestHolder_01 {

        //팩토리함수를 이용한 뷰홀더 생성.

        return TestHolder_01.newInstance(p0)

    }


    override fun getItemCount(): Int {

        return list.size

    }


    override fun onBindViewHolder(p0: TestHolder_01, p1: Int) {

        // 홀더에 정의된 함수로 뷰 그리기

        p0.onBindView(p1, list)

    }

}

//////////////////////////////////////////////////////////////////////////////////////////


activity_main.xml

//////////////////////////////////////////////////////////////////////////////////////////

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">


    <android.support.v7.widget.RecyclerView

        android:id="@+id/recyclerView"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical"

        app:layoutManager="android.support.v7.widget.LinearLayoutManager">


    </android.support.v7.widget.RecyclerView>


</android.support.constraint.ConstraintLayout>

//////////////////////////////////////////////////////////////////////////////////////////



MainActivity.kt

//////////////////////////////////////////////////////////////////////////////////////////

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

//UI그리기

        setupUI()

    }


//data 생성

    fun setData(): ArrayList<People> {


        val list = arrayListOf<People>()

        for (i in 0 until 30) {

            list.add(People("$i name", "$i age", "$i address"))

        }

        list.forEach {

            Log.e("log", "$it")

        }

        return list

    }


    fun setupUI() {

    //아답터 등록 후 끝.

        recyclerView.adapter = TestAdapter_01(setData())

        

    }

}


//////////////////////////////////////////////////////////////////////////////////////////

+ Recent posts