package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.GridLayout
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.myapplication.databinding.ActivityRecyclerviewBinding
class RecyclerviewActivity : AppCompatActivity() {
private lateinit var binding: ActivityRecyclerviewBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRecyclerviewBinding.inflate(layoutInflater)
setContentView(binding.root)
val carList = ArrayList<Car>()
for (i in 0 until 30) {
carList.add(Car("" + i + "번째 자동차", "" + i + "순위 엔진"))
}
val adapter = RecyclerViewAdapter(carList, LayoutInflater.from(this@RecyclerviewActivity))
binding.recyclerView.adapter = adapter
// binding.recyclerView.layoutManager = LinearLayoutManager(this@RecyclerviewActivity)
binding.recyclerView.layoutManager = GridLayoutManager(this@RecyclerviewActivity, 2)
}
}
class RecyclerViewAdapter(val itemList: ArrayList<Car>, val inflater: LayoutInflater) :
//상속받는 함수의 타입은 이너클래스에서 만든 viewholder을 넣어준다.
RecyclerView.Adapter<RecyclerViewAdapter.ViewHodler>() {
//RecyclerViewAdapter의 매게변수 itemlist를 쓰기 위해서 inner클래스 임을 명시해준다.
//그렇지 않으면, outer 클래스의 매개변수를 사용할 수 없음.
//2. findViewById로 textview를 찾아서 viewholder에 저장한다.
inner class ViewHodler(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)
//ViewHolder클래스에 itemview가 매게변수로 들어오기 때문에, 여기서 setonclickListender를 달아준다.
itemView.setOnClickListener {
//뷰의 포지션은 bindingAdapterPosition 변수로 가져온다.
val position: Int = bindingAdapterPosition
val engineName = itemList.get(position).engine
Log.d("engine", engineName)
}
}
}
//1. item_view layout을 객체화시켜준다.
// ViewHolder class의 매개변수로 넣어준다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHodler {
val view = inflater.inflate(R.layout.item_view, parent, false)
return ViewHodler(view)
}
//3. list[position]의 내용물을 저장된 textview(holder.view)에 넣어준다.
override fun onBindViewHolder(holder: ViewHodler, position: Int) {
holder.carName.setText(itemList.get(position).name)
holder.carEngine.setText(itemList.get(position).engine)
}
override fun getItemCount(): Int {
return itemList.size
}
}