inflearn logo
강의

講義

知識共有

[初級編] Androidコミュニティアプリ作成(Android Kotlin)

ブックマークを動的に削除

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

249

choidaehwan92822002

投稿した質問数 15

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안에서만 코드가 돌아야되는거 아닌가 생각했는데 왜 밖에 있는 코드가 실행되는지 이해가 안갑니다!!

android kotlin firebase

回答 1

0

choidaehwan92822002

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

1

bokchi

좋은 질문이시네요.

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

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

이미지가 기본이미지인지 확인

0

131

1

NavController error 발생

0

140

1

fragment 생성하고 메인에서 불러왔는데 안뜹니다.

0

139

2

67강 댓글

0

95

2

7강 데이터바인딩 에러

0

112

2

Firebase 스토리지 유료화 문제

1

292

2

게시글 이미지가 파이어베이스에 저장되지 않습니다.

0

180

2

AVD 갤러리에 이미지 저장 안되는 문제

0

238

2

이미지 받아오는 방법?

0

202

2

회원탈퇴 기능을 추가하려고 합니다.

0

186

2

상태바 질문 드립니다.

0

109

1

섹션2 인트로 페이지 꾸미기 질문 드립니다.

0

108

1

게시판 글을 길게 쓸경우

0

123

2

로그인 로그아웃

0

175

2

갤럭시 연결시 게시판에 업로드한 사진이 보이지 않아요.

0

202

2

웹뷰 AVD 실행안됨

0

189

1

자막켜기가 안되요 ㅜ.ㅜ

1

185

1

리사이클러뷰, 그리드레이아웃 오류

0

185

2

리사이클러뷰 오류 해결 방법이 궁금합니다.

0

193

1

firebase 스마트폰으로 연결이 안되는데 원인이 있을까요

0

256

2

안드로이드 스튜디오 게시글 이미지 업로드 유무

0

217

1

firebase 설정 오류

0

301

2

홈 화면 커뮤니티

0

177

1

게시판 글 읽기

0

238

2