Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- springdatajpa
- 알고리즘
- 스프링
- 자바
- JPQL
- http
- Spring Boot
- 김영한
- Android
- Servlet
- Thymeleaf
- jpa
- db
- 백준
- QueryDSL
- SpringBoot
- 스프링 핵심 기능
- java
- Exception
- Greedy
- kotlin
- 그리디
- 스프링 핵심 원리
- 인프런
- pointcut
- transaction
- AOP
- spring
- JDBC
- Proxy
Archives
- Today
- Total
개발자되기 프로젝트
[Android] ListView, Adapter, Model 본문
ListView를 사용하는 경우 흐름은 다음과 같다.
한 Activity에서 dataLisst를 Adapter에 전달
Adapter는 받은 dataList에서 하나씩 꺼내서 각 item마다 view를 만들어 ListView에 전달.
최종적으로 ListView에는 dataLIst를 기반으로 만들어진 view가 list의 형대로 보여짐.
1. Adapter 생성
- Adapter의 역할: 데이터를 받아와서 (list)view생성
- 표시할 데이터 생성자 주입
- BaseAdapter() 상속
- 메서드들은 자동으로 호출됨. 개별로 호출할 필요 없음.
class ListViewAdapter(val list: MutableList<String>) : BaseAdapter(){
override fun getCount(): Int {
return list.size
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
//listview_item을 사용함.
if (convertView == null){
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item,parent, false)
}
//해당 view에 값 설정.
val title = convertView!!.findViewById<TextView>(R.id.listviewItem)
title.text = list[position]
return convertView!!
}
override fun getItem(position: Int): Any {
return list[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
}
2. ListVIew
<?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="80sp">
<TextView
android:id="@+id/listviewItem"
android:text="리스트뷰 아이템"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"/>
</LinearLayout>
3. MainActivity
Activity에서 adaper생성 후 view와 adapter를 연결해줌.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listItem = mutableListOf<String>()
listItem.add("A")
listItem.add("B")
listItem.add("C")
//listView 설정
val listView = findViewById<ListView>(R.id.listViewId)
//adapter 설정 및 data 전달
val adapter = ListViewAdapter(listItem)
//view와 adapter 연결
listView.adapter = adapter
}
}
4. Model 전달
위와 같이 List 객체를 직접 전달할 수 도 있지만 data class를 사용할 수 도 있다.
data class ListViewModel (
var title: String = "",
var content: String = ""
)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listItem = mutableListOf<ListViewModel>()
listItem.add(ListViewModel("A", "a"))
listItem.add(ListViewModel("B", "b"))
listItem.add(ListViewModel("C", "c"))
val listView = findViewById<ListView>(R.id.listViewId)
val adapter = ListViewAdapter(listItem)
//view의 adapter설정
listView.adapter = adapter
}
}
class ListViewAdapter(val list: MutableList<ListViewModel>) : BaseAdapter(){
override fun getCount(): Int {
return list.size
}
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)
}
//textView에 값 설정.
val title = convertView!!.findViewById<TextView>(R.id.listviewItem)
title.text = list[position].toString()
return convertView!!
}
override fun getItem(position: Int): Any {
return list[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
}
'인프런 > [인프런] 앱 8개를 만들면서 배우는 안드로이드 코틀린' 카테고리의 다른 글
[Kotlin] list에서 random 값 뽑기 (0) | 2022.03.20 |
---|---|
[Android] 뒤로가기, handler, finish (0) | 2022.03.20 |
[Android] Data Binding (0) | 2022.03.17 |
[Android] Activity간 data 전달, Intent putExtra (0) | 2022.03.17 |
[Android] CardView, 모서리 둥글게, cardCornerRadius (0) | 2022.03.17 |
Comments