Addview
1. 리스트로 만들고 싶은 아이템의 리스트를 준비한다
2. 인플레이터를 준비한다
3. 인플레이터로 아이템 하나에 해당하는 뷰를 만들어 준다
4. 위에서 만든 뷰를 컨터이너 뷰에 붙여준다
ListView
1. 리스트로 만들고 싶은 아템의 리스트를 준비한다
2. Adapter를 이용한다(Addview의 2,3,4기능을 가지고 있음)
Addview와 ListView의 차이점
1. 만드는 방식이 다르다
2. 그리는 방식이 다르다
- Addview -> 리스트의 갯수와 상관없이 한번에 다 그린다
- ListView -> 보여지는 부분 + 알파만 한번에 그리고
필요한 경우에 더 그린다
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.Telephony
import android.text.Layout
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_list_view.*
class ListViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_view)
// 아이템리스트 준비
val carList = ArrayList<CarForList>() // 다른 엑티비티꺼 그냥 씀
for (i in 0 until 50) {
carList.add(CarForList("" + i + "번째 자동차", "" + i + "순위 엔진"))
}
val adapter = ListViewAdapter(carList, LayoutInflater.from(this@ListViewActivity))
listView.adapter = adapter
listView.setOnItemClickListener { parent, view, position, id ->
val carName = (adapter.getItem(position) as CarForList).name
val carEngine = (adapter.getItem(position) as CarForList).engine
Toast.makeText(this@ListViewActivity, carName + " " + carEngine, Toast.LENGTH_SHORT)
.show()
}
}
}
class ListViewAdapter(
val carForList: ArrayList<CarForList>,
val layoutInflater: LayoutInflater
) : BaseAdapter() {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
// holder를 사용하는 경우
val view: View
val holder: ViewHolder
if (convertView == null) {
// 최초 로딩
Log.d("convert", "1")
view = layoutInflater.inflate(R.layout.item_view, null)
holder = ViewHolder()
holder.carName = view.findViewById(R.id.car_name)
holder.carEngine = view.findViewById(R.id.car_engine)
view.tag = holder
} else {
// 재활용
Log.d("convert", "2")
holder = convertView.tag as ViewHolder
view = convertView
}
holder.carName?.setText(carForList.get(position).name)
holder.carEngine?.setText(carForList.get(position).engine)
return view
// holder를 사용하지 않는 경우
//val layoutInflater = LayoutInflater.from(context)
// val view = layoutInflater.inflate(R.layout.item_view, null)
// val carNameTextView = view.findViewById<TextView>(R.id.car_name)
// val carEngineTextView = view.findViewById<TextView>(R.id.car_engine)
//
// carNameTextView.setText(carForList.get(position).name)
// carEngineTextView.setText(carForList.get(position).engine)
//
// return view
}
override fun getCount(): Int {
// 그리고자하는 아이템 리시트의 전체 개수
return carForList.size
}
override fun getItem(position: Int): Any {
// 그리고자하는 아이템 리스트의 하나(포지션에 해당하는)
return carForList.get(position)
}
override fun getItemId(position: Int): Long {
// 해당 포지션에 위치해있는 아이템뷰의 아이디 설정
return position.toLong()
}
}
// findViewById를 계속하지 않기 위해 만든 ViewHolder
class ViewHolder {
var carName: TextView? = null
var carEngine: TextView? = null
}
<?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=".ListViewActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"/>
</LinearLayout>
<?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:background="#56C891"
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:gravity="center"
android:padding="4dp"
android:textSize="50dp" />
<TextView
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#673AB7"></TextView>
<TextView
android:id="@+id/car_engine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="4dp"
android:textSize="20dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#FF5722"></LinearLayout>
</LinearLayout>
RecyclerView(전화번호부 만들기) (0) | 2020.11.19 |
---|---|
RecyclerView (0) | 2020.11.19 |
addView(전화번호부 만들기) (0) | 2020.11.19 |
addView (0) | 2020.11.18 |
Library (0) | 2020.11.18 |
댓글 영역