MainActivity.kt
class MainActivity : AppCompatActivity() {
// viewBinding
val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
// Memo 형식의 MutableList => data
val data : MutableList<Memo> = loadData()
val adapter = CustomAdapter()
// adapter의 listData와 data 연결(100개)
adapter.listData = data
// adapter 연결
binding.rcyView.adapter = adapter
binding.rcyView.layoutManager = LinearLayoutManager(this)
}
fun loadData() : MutableList<Memo> {
val data: MutableList<Memo> = mutableListOf()
for (no in 1 .. 100) {
val title = "This is Android Kotlin $no"
val date = System.currentTimeMillis()
var memo = Memo(no, title, date)
data.add(memo)
}
return data
}
}
class CustomAdapter : RecyclerView.Adapter<Holder>() {
// mutableList로 listData
var listData = mutableListOf<Memo>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)
: Holder {
// viewBinding => recyclerView의 item xml 불러오기
val binding = ItemRecyclerBinding.inflate(
LayoutInflater.from(parent.context), parent, false)
return Holder(binding)
}
override fun getItemCount(): Int {
return listData.size
}
override fun onBindViewHolder(holder: Holder, position: Int) {
val memo = listData.get(position)
// holder에 setMemo에 인덱스의 데이터값을 넣음
holder.setMemo(memo)
}
}
// binding => recyclerView item xml 가져오는거
class Holder(val binding: ItemRecyclerBinding)
: RecyclerView.ViewHolder(binding.root) {
init {
// item 클릭시 토스트 메세지 출력
binding.root.setOnClickListener {
Toast.makeText(
binding.root.context,
"clicked item = ${binding.txtTitle.text}",
Toast.LENGTH_LONG
).show()
}
}
//
fun setMemo(memo:Memo) {
// recyclerView의 txtNo => Memo의 num
binding.txtNo.text = memo.num.toString()
// recyclerView의 txtTitle => Memo의 title
binding.txtTitle.text = memo.title
// recyclerView의 timeStamp 형식 맞추기
val sdf = SimpleDateFormat("yyyy-mm-dd")
val forMattedDate = sdf.format(memo.timeStamp)
binding.txtDate.text = forMattedDate
}
}
data class Memo(
var num: Int,
var title: String,
var timeStamp: Long
)