마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

프래그먼트 갱신 질문입니다...

0 추천

안녕하세요~~

엑티비티 안에 여러 프래그먼트들로 구성된 간단한 sns 앱을 만들고 있습니다.

한 프래그먼트 내에 recyclerview가 있고, 각 아이템마다 '좋아요' 이미지를 클릭하면 색이 채워진 '좋아요' 이미지를 디스플레이 하고자 합니다.

 

    inner class FollowRecyclerViewAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>(){

        override fun onCreateViewHolder(p0: ViewGroup, p1: Int): RecyclerView.ViewHolder {
            var view = LayoutInflater.from(p0.context).inflate(R.layout.item_follow,p0,false)

            return CustomViewHolder(view)
        }

        inner class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) {

        }

        override fun getItemCount(): Int {
            return contentDTOs!!.size
        }

        override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) {

            var viewholder = (p0 as CustomViewHolder).itemView
            var currentIndex = 0



            <--중간 생략-->



            //좋아요 카운터 매칭
            viewholder.followitem_favoritecounter_textview.text = "좋아요 " + contentDTOs!![p1].favoriteCount

            //좋아요가 클릭된 경우
            //다시 카운터 매칭
            viewholder.followitem_favorite_imageview.setOnClickListener {
                favoriteEvent(currentUserUid!!, p1)
            }
            //다시 아이콘 매칭
            if (contentDTOs!![p1].favorites.containsKey(currentUserUid)) { //좋아요를 클릭한 경우
                viewholder.followitem_favorite_imageview.setImageResource(R.drawable.ic_favorite_fill)
            } else { //좋아요를 클릭하지 않은 경우
                viewholder.followitem_favorite_imageview.setImageResource(R.drawable.ic_favorite_border)
            }

   
            <--이하 생략-->



}

 

위 코드와 같이 '좋아요' ImageView (followitem_favorite_imageview) 에 setOnClickListener를 적용했구요, 데이터베이스에는 코딩한 대로 바로 업데이트가 되는데

화면상에는 색이 채워진 좋아요 이미지가 실시간으로 적용되지 않습니다..ㅠㅠ

다른 프래그먼트에 갔다가 와야 -> 채워진 좋아요 이미지가 디스플레이 됩니다.

 

구글링 해보니 refresh function을 만들거나, detach attach 기능을 사용하라고 하는데

그래도 적용이 안됩니다..

 

제가 맞닥뜨린 이 문제가 어떤 종류의 문제인지 알려주세요.. 

프래그먼트 갱신과 관련된 문제가 맞나요? 맞다면, 어떻게 해결해야 할까요 ㅠㅠ

 

답변 부탁드립니다..!!! 감사합니다.

 

(추가, onResume & onStrop 기능이 뭔지도 궁금합니다. 저에게 필요한 기능인가요?)

병쥐 (300 포인트) 님이 2019년 8월 14일 질문

2개의 답변

+1 추천
 
채택된 답변
1 먼저 onBindViewHolder() 내부에서 followitem_favorite_imageview에 setOnClickListener 를 호출하는것을

onCreateViewHolder()내부에서 하는것으로 바꾸세요

onBindViewHolder에서 선언하면 아이템이 보일때마다 호출되서 좋지않습니다

 

2. 1번에 이어서 favoriteEvent(currentUserUid!!, viewHolder.adapterPosition)으로 전달하고

favoriteEvent()에서는 데이터를 갱신한 후, notifyItemChanged(position)으로 해당 아이템만 갱신해주면 됩니다
Bateaux (5,200 포인트) 님이 2019년 8월 14일 답변
병쥐님이 2019년 8월 16일 채택됨
프래그먼트 갱신 추가 질문입ㄴㅣ다
+1 추천
데이터베이스에 값 없데이트시키는 부분에서 adapter.notifydatasetchanged()호출하시면 될듯해요
익명사용자 님이 2019년 8월 14일 답변
제가 아직 초보라 정확히 어떻게 적용하는지 잘 모르겠습니다 ㅠㅠㅠㅠㅠ
...