• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

북마크 탭에서 삭제기능을 추가하려고합니다

22.03.21 00:20 작성 조회수 209

0

북마크 탭에서 삭제기능을 추가하려고합니다

삭제기능을 추가해 북마크 아이콘을 누르면 삭제된 콘텐츠빼고 새롭게 다시북마크 탭에 드가게되는데

이거를 처음 북마크상태가 남아있어 계쏙 계쏙 쌓이게 됩니다  기존의 레이아웃에 계쏙 초기화시키는 방법밖에 없을까요?..

 

 

BookmarkFragment.kt

```

package com.example.communityapp.fragments

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.navigation.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.communityapp.R
import com.example.communityapp.contentlist.BookmarkRVAdapter
import com.example.communityapp.contentlist.ContentModel
import com.example.communityapp.databinding.FragmentBookmarkBinding
import com.example.communityapp.utills.FBRef
import com.example.communityapp.utills.FBauth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener

// TODO: Rename parameter arguments, choose names that match


class BookmarkFragment : Fragment() {

private lateinit var binding: FragmentBookmarkBinding

lateinit var rvAdapter: BookmarkRVAdapter
val bookmarkIdList = mutableListOf<String>()
val items = ArrayList<ContentModel>()
val itemKeyList = ArrayList<String>()

private val TAG = BookmarkFragment::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bookmark, container, false)


//2
getBookmarkData()

//3
rvAdapter = BookmarkRVAdapter(requireContext(), items, itemKeyList, bookmarkIdList)


val rv: RecyclerView = binding.bookmarkRV
rv.adapter = rvAdapter
rv.layoutManager = GridLayoutManager(requireContext(), 2)



binding.hometap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_homeFragment)
}

binding.tiptap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_tipFragment)
}

binding.storetap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_storeFragment)
}

binding.talktap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_talkFragment)
}
return binding.root
}


private fun getCategoryData() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {

for (dataModel in dataSnapshot.children) {

Log.d(TAG, dataModel.toString())
val item = dataModel.getValue(ContentModel::class.java)
if (bookmarkIdList.contains(dataModel.key.toString())) {
items.add(item!!)
itemKeyList.add(dataModel.key.toString())
}

}
rvAdapter.notifyDataSetChanged()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.category1.addValueEventListener(postListener)
FBRef.category2.addValueEventListener(postListener)
FBRef.category3.addValueEventListener(postListener)
FBRef.category4.addValueEventListener(postListener)
FBRef.category5.addValueEventListener(postListener)
FBRef.category6.addValueEventListener(postListener)
FBRef.category7.addValueEventListener(postListener)
FBRef.category8.addValueEventListener(postListener)

}

private fun getBookmarkData() {

val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
bookmarkIdList.clear()
for (dataModel in dataSnapshot.children) {
bookmarkIdList.add(dataModel.key.toString())
}
//1
rvAdapter.notifyDataSetChanged()

getCategoryData()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.bookmarkRef.child(FBauth.getUid()).addValueEventListener(postListener)

}
}

```

BookMarkRVAdapter.kt
```
package com.example.communityapp.contentlist

import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.communityapp.R
import com.example.communityapp.utills.FBRef
import com.example.communityapp.utills.FBauth

class BookmarkRVAdapter(val context: Context,
val items: ArrayList<ContentModel>,
val keyList:ArrayList<String>,
val bookmarkIdList:MutableList<String>) : RecyclerView.Adapter<BookmarkRVAdapter.ViewHolder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkRVAdapter.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.content_rv_item, parent, false)
return ViewHolder(v)
}

override fun onBindViewHolder(holder: BookmarkRVAdapter.ViewHolder, position: Int) {


holder.bindItem(items[position],keyList[position])
}

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

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItem(item: ContentModel,key:String) {

itemView.setOnClickListener {
Toast.makeText(context, item.title, Toast.LENGTH_SHORT).show()
val intent = Intent(context, ContentshowActivity::class.java)
intent.putExtra("url", item.webUrl)
itemView.context.startActivity(intent)

}

val contentTitle = itemView.findViewById<TextView>(R.id.textArea)
val imageViewArea = itemView.findViewById<ImageView>(R.id.imageArea)
val bookmarkArea=itemView.findViewById<ImageView>(R.id.bookmarkArea)



bookmarkArea.setImageResource(R.drawable.bookmark_color)


bookmarkArea.setOnClickListener{
Toast.makeText(context, key, Toast.LENGTH_SHORT)
Log.d("BookmarkRVAdapter", FBauth.getUid())


FBRef.bookmarkRef
.child(FBauth.getUid())
.child(key)
.removeValue()

notifyDataSetChanged()

}

contentTitle.text = item.title

Glide.with(context)
.load(item.imageUrl)
.into(imageViewArea)
}
}

}
```

자신이 북마크한 콘텐츠를 다시 bookmarkFragment 에서 삭제하려고할때 
bookmarkIdlist 에서는 원활하게 삭제되는데

화면상으로 레이아웃에서 기존에 bookmarkIdlist 가 남아있는데 
화면상에서 기존에있는 bookmarkIdlist를 어떻게 삭제해야할까요 ?...ㅠㅠㅠ

 

답변 5

·

답변을 작성해보세요.

0

bookmarkFragment에서 onItemClick 부분이 잘 못 되었네요.

코드를 아마 긁어오셔서 사용하셔서 정확히 어떤 뜻인지 모르고 사용하신 것 같습니다.

일단 onItemClick 을 하면 로그가 aaa,bbb로 찍히게 수정해놨으니 여기서부터 시작해보시겠어요?

 

package com.example.communityapp.fragments


import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.navigation.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.communityapp.R
import com.example.communityapp.contentlist.BookmarkRVAdapter
import com.example.communityapp.contentlist.ContentModel
import com.example.communityapp.databinding.FragmentBookmarkBinding
import com.example.communityapp.utills.FBRef
import com.example.communityapp.utills.FBauth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener

// TODO: Rename parameter arguments, choose names that match


class BookmarkFragment : Fragment() {

private lateinit var binding: FragmentBookmarkBinding

lateinit var rvAdapter: BookmarkRVAdapter
val bookmarkIdList = mutableListOf<String>()
val items = ArrayList<ContentModel>()
val itemKeyList = ArrayList<String>()

private val TAG = BookmarkFragment::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bookmark, container, false)


//2
getBookmarkData()

//3
rvAdapter = BookmarkRVAdapter(requireContext(), items, itemKeyList, bookmarkIdList)


val rv: RecyclerView = binding.bookmarkRV
rv.adapter = rvAdapter
rv.layoutManager = GridLayoutManager(requireContext(), 2)



binding.hometap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_homeFragment)
}

binding.tiptap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_tipFragment)
}

binding.storetap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_storeFragment)
}

binding.talktap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_talkFragment)
}




rvAdapter.setOnItemClickListener(object : BookmarkRVAdapter.OnItemClickListener{
override fun onItemClick(v: View, data: ContentModel, pos : Int) {
Log.d("aaa", "bbb")
}

})
return binding.root


}



private fun getCategoryData() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {

for (dataModel in dataSnapshot.children) {

Log.d(TAG, dataModel.toString())
val item = dataModel.getValue(ContentModel::class.java)
if (bookmarkIdList.contains(dataModel.key.toString())) {
items.add(item!!)
itemKeyList.add(dataModel.key.toString())
}

}
rvAdapter.notifyDataSetChanged()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.category1.addValueEventListener(postListener)
FBRef.category2.addValueEventListener(postListener)
FBRef.category3.addValueEventListener(postListener)
FBRef.category4.addValueEventListener(postListener)
FBRef.category5.addValueEventListener(postListener)
FBRef.category6.addValueEventListener(postListener)
FBRef.category7.addValueEventListener(postListener)
FBRef.category8.addValueEventListener(postListener)

}


private fun getBookmarkData() {

val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
bookmarkIdList.clear()
for (dataModel in dataSnapshot.children) {
bookmarkIdList.add(dataModel.key.toString())
}
//1




rvAdapter.notifyDataSetChanged()

getCategoryData()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.bookmarkRef.child(FBauth.getUid()).addValueEventListener(postListener)

}

}

0

용혁김님의 프로필

용혁김

2022.03.27

선생님 ... 올려주신거를 참고로 인터페이스 추가해서 만들어봤습니다
근데하지만 북마크 클릭시 강제종료가되는 현상이발생합니다 .. ㅠㅠ
마지막으로 저가 맞게 했는지만 봐주시면 안될까요? 정말죄송합니다..
코드 자세히 보실려면 깃허브 저번꺼에 업로드 했어요..






 rvAdapter.setOnItemClickListener(object : BookmarkRVAdapter.OnItemClickListener{
override fun onItemClick(v: View, data: ContentModel, pos : Int) {
Intent(context,BookmarkFragment::class.java).apply {


Log.d("clicktest:", "클릭")
// var ft: FragmentTransaction = fragmentManager!!.beginTransaction()
// ft.detach(Fragment()).attach(Fragment()).commit()

addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}.run { startActivity(this) }
}

})

이부분에서 계속 오류가 뜨는거같은데.. ㅠㅠㅠㅠ :(


BookmarkRVAdapter.kt




package
com.example.communityapp.contentlist

import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.communityapp.R
import com.example.communityapp.databinding.FragmentBookmarkBinding
import com.example.communityapp.fragments.BookmarkFragment
import com.example.communityapp.utills.FBRef
import com.example.communityapp.utills.FBauth

class BookmarkRVAdapter(val context: Context,
val items: ArrayList<ContentModel>,
val keyList:ArrayList<String>,
val bookmarkIdList:MutableList<String>) : RecyclerView.Adapter<BookmarkRVAdapter.ViewHolder>() {

var datas = mutableListOf<BookmarkFragment>()

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkRVAdapter.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.content_rv_item, parent, false)
return ViewHolder(v)
}

override fun onBindViewHolder(holder: BookmarkRVAdapter.ViewHolder, position: Int) {


holder.bindItem(items[position],keyList[position])
}

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

// Click 이벤트 적용하기
interface OnItemClickListener{
fun onItemClick(v:View, data: ContentModel, pos: Int)
}
private var listener : OnItemClickListener? = null
fun setOnItemClickListener(listener : OnItemClickListener) {
this.listener = listener
}



inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItem(item: ContentModel,key:String) {

itemView.setOnClickListener {
Toast.makeText(context, item.title, Toast.LENGTH_SHORT).show()
val intent = Intent(context, ContentshowActivity::class.java)
intent.putExtra("url", item.webUrl)
itemView.context.startActivity(intent)

}

val contentTitle = itemView.findViewById<TextView>(R.id.textArea)
val imageViewArea = itemView.findViewById<ImageView>(R.id.imageArea)
val bookmarkArea=itemView.findViewById<ImageView>(R.id.bookmarkArea)


bookmarkArea.setImageResource(R.drawable.bookmark_color)



bookmarkArea.setOnClickListener{
Toast.makeText(context, key, Toast.LENGTH_SHORT)
Log.d("BookmarkRVAdapter", FBauth.getUid())
Log.d("Bookmarkrv:", bookmarkIdList.toString())

FBRef.bookmarkRef
.child(FBauth.getUid())
.child(key)
.removeValue()

val pos = adapterPosition
if(pos!= RecyclerView.NO_POSITION)
{

listener?.onItemClick(itemView,item,pos)

}
//

notifyDataSetChanged()

}



contentTitle.text = item.title

Glide.with(context)
.load(item.imageUrl)
.into(imageViewArea)
}
}


}
BookmarkFragment.kt

package
com.example.communityapp.fragments


import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.navigation.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.communityapp.R
import com.example.communityapp.contentlist.BookmarkRVAdapter
import com.example.communityapp.contentlist.ContentModel
import com.example.communityapp.databinding.FragmentBookmarkBinding
import com.example.communityapp.utills.FBRef
import com.example.communityapp.utills.FBauth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener

// TODO: Rename parameter arguments, choose names that match


class BookmarkFragment : Fragment() {

private lateinit var binding: FragmentBookmarkBinding

lateinit var rvAdapter: BookmarkRVAdapter
val bookmarkIdList = mutableListOf<String>()
val items = ArrayList<ContentModel>()
val itemKeyList = ArrayList<String>()

private val TAG = BookmarkFragment::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bookmark, container, false)


//2
getBookmarkData()

//3
rvAdapter = BookmarkRVAdapter(requireContext(), items, itemKeyList, bookmarkIdList)


val rv: RecyclerView = binding.bookmarkRV
rv.adapter = rvAdapter
rv.layoutManager = GridLayoutManager(requireContext(), 2)



binding.hometap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_homeFragment)
}

binding.tiptap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_tipFragment)
}

binding.storetap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_storeFragment)
}

binding.talktap.setOnClickListener {
it.findNavController().navigate(R.id.action_bookmarkFragment_to_talkFragment)
}




rvAdapter.setOnItemClickListener(object : BookmarkRVAdapter.OnItemClickListener{
override fun onItemClick(v: View, data: ContentModel, pos : Int) {
Intent(context,BookmarkFragment::class.java).apply {


Log.d("clicktest:", "클릭")
// var ft: FragmentTransaction = fragmentManager!!.beginTransaction()
// ft.detach(Fragment()).attach(Fragment()).commit()

addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}.run { startActivity(this) }
}

})
return binding.root


}



private fun getCategoryData() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {

for (dataModel in dataSnapshot.children) {

Log.d(TAG, dataModel.toString())
val item = dataModel.getValue(ContentModel::class.java)
if (bookmarkIdList.contains(dataModel.key.toString())) {
items.add(item!!)
itemKeyList.add(dataModel.key.toString())
}

}
rvAdapter.notifyDataSetChanged()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.category1.addValueEventListener(postListener)
FBRef.category2.addValueEventListener(postListener)
FBRef.category3.addValueEventListener(postListener)
FBRef.category4.addValueEventListener(postListener)
FBRef.category5.addValueEventListener(postListener)
FBRef.category6.addValueEventListener(postListener)
FBRef.category7.addValueEventListener(postListener)
FBRef.category8.addValueEventListener(postListener)

}


private fun getBookmarkData() {

val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
bookmarkIdList.clear()
for (dataModel in dataSnapshot.children) {
bookmarkIdList.add(dataModel.key.toString())
}
//1




rvAdapter.notifyDataSetChanged()

getCategoryData()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.bookmarkRef.child(FBauth.getUid()).addValueEventListener(postListener)

}

}

0

용혁김님의 프로필

용혁김

2022.03.23

이겁ㄴ다

코드를 보고 질문을 이해했습니다.

 

일단 원인은 아래와 같습니다.

 

아래의 코드에서 데이터를 모두 불러오고 난 뒤에, bookmark된 데이터 부분을 색칠해주는 형태로 구현하셨는데

 

onDataChange가 되면서 새로운 정보를 모두 불러오는데, items와 itemKeyList부분에 데이터가 겹쳐서 생긴 일입니다.

 

그런데 onDataChange부분에 items와 itemKeyList를 clear를 하면 데이터가 새롭게 초기화되는 문제가 발생하여 마지막 category8의 데이터만 items와 itemKeyList에 남지 않습니다.

 

이럴 때는 방법이 데이터 구조를 변경해야 하는 방법과 다른 방법이 있는데 설명드리면

 

1. category1~8 까지 카테고리를 모두 받아오는 데이터베이스(realtimeDatabase)를 만듭니다.

아래와 같이 category1~8 를 반복적으로 불러오지 마시고, category_all 이라고 한 곳에서 모든 데이터를 가져오고 북마크 데이터를 보여주는 형태로 구성해보세요. 

이렇게 하면 onDataChange부분에 초기화를 시켜줘도 문제가 되지 않습니다.

 

 

2. 구조를 변경하기 귀찮으시면, 그냥 bookmarkFragment를 refresh를 해주시면 됩니다.

(북마크를 클릭하면요)

새롭게 Fragment를 시작하면서 데이터를 처음부터 받아오는거죠

아래 글을 참고해주세요.

https://maivve.tistory.com/35

 

그리고 setOnItemClick같은 부분이 adapter에서 구현되어 있는데 Fragment에서 만들어주셔서 새롭게 초기화시켜주는 것이 간단할 것으로 보입니다.

아래 글을 참고하셔서 interface를 만들어서 실행해보시겠어요?

https://yunaaaas.tistory.com/57

 

private fun getCategoryData() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {

for (dataModel in dataSnapshot.children) {

Log.d(TAG, dataModel.toString())
val item = dataModel.getValue(ContentModel::class.java)
if (bookmarkIdList.contains(dataModel.key.toString())) {
items.add(item!!)
itemKeyList.add(dataModel.key.toString())
}

}
rvAdapter.notifyDataSetChanged()
}

override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.category1.addValueEventListener(postListener)
FBRef.category2.addValueEventListener(postListener)
FBRef.category3.addValueEventListener(postListener)
FBRef.category4.addValueEventListener(postListener)
FBRef.category5.addValueEventListener(postListener)
FBRef.category6.addValueEventListener(postListener)
FBRef.category7.addValueEventListener(postListener)
FBRef.category8.addValueEventListener(postListener)

}

0

용혁김님의 프로필

용혁김

2022.03.23

선생님 저가  그전 코드에서 부터 

getBookmarkData()에서 

bookmarkIdList.clear()
넣으니깐 idlist 에선 잘 삭제가된걸 확인했는데...


Bookmarklayout 에서 그전 idlist 값이 남아있어서?

삭제하면 그전 레이아웃 idlist 값의 레이아웃(이미지) 새롭게 드가는 idlist 값이 동시에 공존해있어
문의 드렸어용



혹시나 싶어서
 getCategoryData() 
에서
bookmarkIdList.clear() 넣어도 그전 idlist (이미지)값 이 bookmarkFragment에 남아있더라구요...ㅠㅠ


그래서 이걸 삭제할때마다 레이아웃을 새롭게 리셋 시켜야하나 싶어서 문의드렸어요

음 이건 저도 코드를 돌려봐야 할 것 같은데요

깃허브에 코드를 업로드하시고 링크를 공유해주시겠어요?

0

안뇽하세요 용혁김님

제가 질문을 잘 이해했는지 모르겠는데, 북마크 삭제를 누르면 새롭게 북마크 리스트가 다시 추가되서 겹친다는 말씀이신가요?

 

Firebase 특성 상, 데이터가 changed되면 새롭게 db를 가져오는 작업을 실행합니다

때문에 아래의 부분에서

getCategoryData
getBookmarkData

 

onDataChange에 bookmarkIdList를 clear해준 것 처럼 

override fun onDataChange(dataSnapshot: DataSnapshot) {
bookmarkIdList.clear()

 

새롭게 중복되는 부분을 clear해주는 코드를 추가하시면 될 듯 합니다.

 

제가 질문을 잘 못 이해했다면, 전체 소스코드를 깃허브에 올려주시고 링크과 함께 좀 더 자세하게 질문해주시면 도움드릴 수 있을 것 같습니다 :)