인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

최대환님의 프로필 이미지
최대환

작성한 질문수

[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)

북마크 동적으로 삭제

어떻게 저것만 작성했는데 동적으로 삭제가 되는지 이해가 안가요

작성

·

176

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

최대환님의 프로필 이미지
최대환
질문자

좀 더 생각해보니 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에 있는 로직을 타는거 같은데 그럼 나중에 데이터가 많아졌을때는 다른 방식으로 구현해야 좋은건가요?

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

좋은 질문이시네요.

모든 데이터를 다시 새롭게 받아와서 그려주는 것은 굉장히 불필요한 작업입니다.

"diffutil" 이라는 키워드로 조금 찾아보시겠어요?

최대환님의 프로필 이미지
최대환

작성한 질문수

질문하기