본문 바로가기

Dead Code/DEPRECATED-KOTLIN

[코틀린코드연습장] RecycleView 뭐에다 쓰는건가



listView를 대신할 목적으로 RecycleView를 쓰라고 하는데,영 귀찮은게 많다. 

네이버를 좀 찾아서 찾긴했는데, 

초보자에게는 영 헤깔리는 부분이 많다. 


최대한 간결하게 작성한 코드이다. 


[메인액티비티.kt]


class MainActivity : AppCompatActivity() {

data class Color(val name: String, val food: String, val photo: String)

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

var colorList = arrayListOf<Color>(
Color("RED", "Like Strawberry", "red"),
Color("Blue", "Like SkyCake", "blue"),
Color("Purple", "Like Grape", "purple")
)

var adapter = Adapter(this, colorList) {color ->
Toast.makeText(this, "선택한 색상은 ${color.name}이고, 이 색상의 과일은 ${color.food}입니다.",Toast.LENGTH_SHORT).show()
}
recycleView.adapter = adapter

var lm = LinearLayoutManager(this)
recycleView.layoutManager = lm
recycleView.setHasFixedSize(true)
}
}



[아답터.kt]


class Adapter(val context : Context, val colorList : ArrayList<MainActivity.Color>,
val itemClick : (MainActivity.Color) -> Unit) : RecyclerView.Adapter<Adapter.Holder>() {

override fun getItemCount(): Int {
return colorList.size
}

override fun onCreateViewHolder(p0: ViewGroup, p1: Int): Holder {
var view = LayoutInflater.from(context).inflate(R.layout.recycle_layout, null)
return Holder(view, itemClick)
}

override fun onBindViewHolder(p0: Holder, p1: Int) {
p0?.bind(colorList[p1], context)
}

inner class Holder(itemView: View?, itemClick: (MainActivity.Color) -> Unit) : RecyclerView.ViewHolder(itemView!!){
val txt1 = itemView?.findViewById<TextView>(R.id.textView2)
val txt2 = itemView?.findViewById<TextView>(R.id.textView3)
val image = itemView?.findViewById<ImageView>(R.id.imageView)

fun bind(colorList: MainActivity.Color, context: Context) {

var imageID = context.resources.getIdentifier(colorList.photo, "drawable", context.packageName)
image?.setImageResource(imageID)
txt1?.text = colorList.name
txt2?.text = colorList.food

itemView?.setOnClickListener { itemClick(colorList) }
}
}
}