엔지니어 규의 IT 프로그래밍 다이어리

Android List View(3) - Recycler View 본문

카테고리 없음

Android List View(3) - Recycler View

엔지니어 규 2022. 7. 10. 16:17
728x90

RecyclerView

 

장점

 

-listView의 개선판 (ViewHolder 를 포함)

 

-유연하다 ( LayoutManager 관리를 통해  1. Linear, 2. Grid, 3. StaggeredGrid.. 등등 을 쓸수있다.)  

 

- ListView 중에 RecyclerView 가 가장 성능이 좋기때문에 고민할 필요없이 RecyclerView를 사용하면 된다.

위 앱을 다시 RecyclerView 로 만들어보자.

 

package com.example.recyclerview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.ArrayList

class MainActivity : AppCompatActivity() {

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

        val carList = ArrayList<CarForList>()
        for (i in 0 until 20) {
            carList.add(CarForList("" + i + "번째 자동차", "" + i + "번째 엔진"))
        }
        val adapter = RecyclerViewAdapter(carList, LayoutInflater.from(this@MainActivity))
        val recycler_view = findViewById<RecyclerView>(R.id.recycler_view)

        recycler_view.adapter = adapter
        recycler_view.layoutManager = LinearLayoutManager(this@MainActivity)
    }
}

class CarForList(val name: String, val engine: String) {}

class RecyclerViewAdapter(
    val itemList : ArrayList<CarForList>,
    val inflater : LayoutInflater
) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>(){

    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)
        }
    }

    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).name)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = inflater.inflate(R.layout.item_view,parent,false)
        return ViewHolder(view)
    }
}

 

<?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:background="#0FC9CF"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/car_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:padding="6dp"
            android:textSize="20dp">
        </TextView>

        <TextView
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="#B53E6BDC">
        </TextView>

        <TextView
            android:id="@+id/car_engine"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="20dp">

        </TextView>

    </LinearLayout>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="1dp">
    </androidx.appcompat.widget.LinearLayoutCompat>

</LinearLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">
    
    <androidx.recyclerview.widget.RecyclerView

        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>

 

728x90
Comments