Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 데이터바인딩
- json 저장
- Room 데이터베이스 업데이트
- mutable
- 안드로이드 스튜디오 애뮬레이터
- compse state
- 코틀린 이미지저장 #파일저장
- apk이름변경
- 토글 험수
- withContext
- 코틀린 트리거 버튼
- livedata
- var 와 val
- 라이브데이터 postValue
- #큐구조 #큐다운로드
- compse collectAsState
- TowmonUSB 연결오류
- TwomonUSB
Archives
- Today
- Total
EnjoyLife
초간단 리사이클러뷰 본문
퍼옴:"이것이 안드로이드다 with 코틀린" 책의 저자이신 "고돈호"님의 코드입니다.
05장 2.2 리사이클러뷰 > 이것이안드로이드다with코틀린 | flow9.net - 코틀린, 안드로이드
MainActivity
class MainActivity : AppCompatActivity() {
val binding by lazy {ActivityMainBinding.inflate(layoutInflater)}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
// 1. 데이터를 불러온다
val data = loadData()
// 2. 아답터를 생성
val customAdapter = CustomAdapter(data)
// 3. 화면의 RecyclerView와 연결
binding.recyclerView.adapter = customAdapter
// 4. 레이아웃 매니저 설정
binding.recyclerView.layoutManager = LinearLayoutManager(this)
}
fun loadData() : MutableList<Memo> {
val memoList = mutableListOf<Memo>()
for(no in 1..100) {
val title = "이것이 안드로이드다 $no"
val date = System.currentTimeMillis()
val memo = Memo(no, title, date)
memoList.add(memo)
}
return memoList
}
}
Memo
data class Memo (var no:Int, var title:String, var timestamp:Long)
CustomAdapter
class CustomAdapter(val listData:MutableList<Memo>) : RecyclerView.Adapter<CustomAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = ItemRecyclerBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return Holder(binding)
}
override fun getItemCount() = listData.size
override fun onBindViewHolder(holder: Holder, position: Int) {
// 1. 사용할 데이터를 꺼내고
val memo = listData.get(position)
// 2. 홀더에 데이터를 전달
holder.setMemo(memo)
}
class Holder(val binding:ItemRecyclerBinding):RecyclerView.ViewHolder(binding.root) {
lateinit var currentMemo:Memo
// 클릭처리는 init 에서만 한다
init {
binding.root.setOnClickListener {
Toast.makeText(binding.root.context, "클릭된 아이템 : ${currentMemo.title}", Toast.LENGTH_SHORT).show()
}
}
// 3. 받은 데이터를 화면에 출력한다.
fun setMemo(memo:Memo) {
currentMemo = memo
with(binding){
textNo.text = "${memo.no}"
textTitle.text = memo.title
val sdf = SimpleDateFormat("yyyy-MM-dd")
val formattedDate = sdf.format(memo.timestamp)
textDate.text = formattedDate
}
}
}
}
'안드로이드 개발 > 개발팁' 카테고리의 다른 글
LiveData 의 변수는 언제 posVaue 와 value 을 골라서 써야될까? (0) | 2024.04.19 |
---|---|
코루틴의 withContext(Dispatchers.Main) 사용하는 이유 (0) | 2024.04.17 |
버튼에 데이터 바인딩으로 트리거를 달자 (0) | 2024.03.21 |
Error while waiting for device: Timed out after 300seconds waiting for emulator to come online. (0) | 2024.01.11 |
apk 추출시 파일이름 커스텀하기 (0) | 2024.01.11 |