[AndroidStudio] RecyclerView

han91·2024년 4월 28일

[AndroidStudio]

목록 보기
6/15

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
    }
}

CustomAdapter.kt
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
    }
}

Memo.kt
data class Memo(
    var num: Int,
    var title: String,
    var timeStamp: Long
    )
profile
천방지축어리둥절빙글빙글돌아가는개발자

0개의 댓글