23.09.12 14:35 작성
·
163
0
'북마크 동적으로 삭제'강의에서
bookmarkIdList.remove(key)
만 추가했더니 ui상에서 지워지는지 이해가 안갑니다!
if(bookmarkIdList.contains(key)) {
contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_color)
} else {
contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_white)
}
// setOnClickListener가 여기 아래에 있고 색깔 칠하는 로직은 그위에 있음
contentRvItemBinding.bookmarkArea.setOnClickListener {
if(bookmarkIdList.contains(key)) {
bookmarkIdList.remove(key) // 북마크 동적으로 삭제하는코드
위의 코드에서 bookmarkIdList에 따라 색깔을 칠할지 안칠할지 결정하는 코드는 아래 코드이고
if(bookmarkIdList.contains(key)) {
contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_color)
} else {
contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_white)
}
setOnClickListener 밖에 있습니다. 근데 북마크버튼을 클릭을 하면 저코드가 실행되어서 색깔을 칠해주거나 없애줍니다.
제 생각으로는 북마크를 클릭하면 setOnClickListener안에서만 코드가 돌아야되는거 아닌가 생각했는데 왜 밖에 있는 코드가 실행되는지 이해가 안갑니다!!
답변 1
0
2023. 09. 12. 15:43
좀 더 생각해보니 ContentListActivity에서
private fun getBookmarkData() {
FBRef.bookmarkRef.child(FBAuth.getUid()).addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
bookmarkIdList.clear()
for (dataModel in dataSnapshot.children) {
Log.e("myLog", dataModel.toString())
bookmarkIdList.add(dataModel.key.toString())
}
rvAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
}
}
)
}
이렇게 onDataChange가 있고 그안에
rvAdapter.notifyDataSetChanged()
이 코드가 있어서 데이터가 바뀔때마다 새로고침 해줘서 그런거같습니다! 이부분은 이해됐습니다!
그렇다면 하나의 데이터 수정을 위해 전체 데이터가 저 RVAdapter에 있는 로직을 타는거 같은데 그럼 나중에 데이터가 많아졌을때는 다른 방식으로 구현해야 좋은건가요?
2023. 09. 16. 18:07
좋은 질문이시네요.
모든 데이터를 다시 새롭게 받아와서 그려주는 것은 굉장히 불필요한 작업입니다.
"diffutil" 이라는 키워드로 조금 찾아보시겠어요?