Kotlin

[android : kotlin] 코틀린 리스트 뷰(ListView) 사용 예제

리스트뷰(ListView)는 여러 항목들을 제공하고, 스크롤 가능한 항목을 나타낼 때 사용되는 뷰 그룹이다. ListView에 먼저 View를 배치 후 데이터를 View의 형식에 맞게 변환하여 가져온다. 리스트뷰를 구성하기 위해서는 adapter(어댑터) 객체를 생성 후 설정해야한다. OnItemClickListener()는 리스트뷰의 항목을 클릭했을때 반응하는 이벤트 리스너이다.

 

 

 

 

[MainActivity.kt]

package edu.kotlin.study

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.RadioGroup
import android.widget.SeekBar
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    var dataArr = arrayOf("사과", "복숭아", "오렌지", "자두", "배")

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

        var simpleListAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, dataArr)

        listview1.adapter = simpleListAdapter

        //리스너 구현 방법 1 :중첩함수를 사용하는 방법
        //var listener = SimpleListListener()
        //listview1.onItemClickListener = listener

        //리스너 구현 방법 2 : 람다식 사용 : 오버라이드해야할 메서드가 1개 임으로 가능하다.
        listview1.setOnItemClickListener { parent, view, position, id ->
            textView1.text = dataArr[position]
        }

    }

    inner class SimpleListListener : AdapterView.OnItemClickListener {
        override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            textView1.text = dataArr[position]
        }

    }
}

[activity_main.xml]

<?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="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="리스트뷰"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2" />
 
    <ListView
        android:id="@+id/listview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

[build.gradle(:app)] 

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29

    defaultConfig {
        applicationId "edu.kotlin.study"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

ListView는 Adapter를 통해 getView 메서드를 호출하여 View를 만든다. 최초로 화면을 로딩한 후에도 스크롤을 움직이는 등 액션을 취하면 그 때마다 findViewById를 통해 convertView에 들어갈 요소를 찾기 때문에 리소스를 많이 사용하게 되고 속도가 느려지는 단점을 가지고 있다. 리스트 뷰의 단점을 보완하기 위해 리사이클러뷰(RecyclerView)가 지원된다.

Leave a Reply

error: Content is protected !!