반응형
A,B,C 리스트가 나온 뒤 리스트를 클릭 시 문구가 뜨게 하는 기본적인 방법
MainActity layout <ListView 생성>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<ListView
android:id="@+id/mainListView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
layout->New->listview_item 만들기 (이름상관없음)
ListView layout <TextView 생성>
<?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="80dp">
<TextView
android:id="@+id/listviewItemText"
android:text="Text Text"
android:textSize="20sp"
android:layout_margin="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Kotlin->New->Kotlin Class->ListViewAdapter 생성
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import com.example.listviewdd.R
class ListViewAdapter(val List : MutableList<String>) : BaseAdapter() {
override fun getCount(): Int {
return List.size
}
override fun getItem(position: Int): Any {
return List[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
if(convertView == null) {
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent, false)
}
var listviewText = convertView?.findViewById<TextView>(R.id.listviewItemText)
listviewText!!.text = List[position]
return convertView!!
}
}
MainActivity 작성
package com.example.listviewdd
import ListViewAdapter
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list_item = mutableListOf<String>()
list_item.add("A")
list_item.add("B")
list_item.add("C")
val listview = findViewById<ListView>(R.id.mainListView)
val listviewAdapter = ListViewAdapter(list_item)
listview.adapter = listviewAdapter
listview.setOnItemClickListener { parent, view, position, id ->
Toast.makeText(this, list_item[position], Toast.LENGTH_LONG).show()
}
}
}
번외 데이터 모델로 넣는 방법
ListViewAdapter 생성하기
package com.example.listviewdd
data class ListViewModel (
val text1 : String,
val text2 : String
)
listview_item의 TextView 하나 더 추가
<?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="80dp">
<TextView
android:id="@+id/listviewItemText"
android:text="Text Text"
android:textSize="20sp"
android:layout_margin="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/listviewItemText2"
android:text="Text Text"
android:textSize="10sp"
android:layout_margin="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity 수정
package com.example.listviewdd
import ListViewAdapter
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list_item2 = mutableListOf<ListViewModel>()
list_item2.add(ListViewModel("a","b"))
list_item2.add(ListViewModel("c","d"))
list_item2.add(ListViewModel("e","f"))
val listview = findViewById<ListView>(R.id.mainListView)
val listviewAdapter = ListViewAdapter(list_item2)
listview.adapter = listviewAdapter
listview.setOnItemClickListener { parent, view, position, id ->
Toast.makeText(this, list_item2[position].text1, Toast.LENGTH_LONG).show()
}
}
}
ListViewAdapter 수정
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import com.example.listviewdd.ListViewModel
import com.example.listviewdd.R
class ListViewAdapter(val List : MutableList<ListViewModel>) : BaseAdapter() {
override fun getCount(): Int {
return List.size
}
override fun getItem(position: Int): Any {
return List[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
if(convertView == null) {
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent, false)
}
var listviewText = convertView?.findViewById<TextView>(R.id.listviewItemText)
var listviewText2 = convertView?.findViewById<TextView>(R.id.listviewItemText2)
listviewText!!.text = List[position].text1
listviewText!!.text = List[position].text2
return convertView!!
}
}
반응형
'kotlin↗ > 안드로이드 스튜디오 메이킹' 카테고리의 다른 글
KOTLIN]해당 이미지(버튼)을 누르면 원하는 화면으로 넘어가기 (0) | 2024.02.01 |
---|---|
KOTLIN]이미지 일정하게 간격 두면서 테두리 둥글게 만들기 (0) | 2024.02.01 |
KOTLIN]어플 키면 처음에 등장하는 Splash 화면 만들기 (0) | 2024.02.01 |
KOTLIN]앱 배경화면 이미지로 변경하기 (0) | 2024.02.01 |
KOTLIN] ListView 작성하기 (0) | 2024.02.01 |