질문&답변
북마크 탭에서 삭제기능을 추가하려고합니다
선생님 ... 올려주신거를 참고로 인터페이스 추가해서 만들어봤습니다 근데하지만 북마크 클릭시 강제종료가되는 현상이발생합니다 .. ㅠㅠ 마지막으로 저가 맞게 했는지만 봐주시면 안될까요? 정말죄송합니다.. 코드 자세히 보실려면 깃허브 저번꺼에 업로드 했어요.. 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 , val keyList :ArrayList , val bookmarkIdList :MutableList ) : RecyclerView.Adapter () { var datas = mutableListOf () 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 (R.id. textArea ) val imageViewArea = itemView .findViewById (R.id. imageArea ) val bookmarkArea= itemView .findViewById (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 () val items = ArrayList () val itemKeyList = ArrayList () 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
- 댓글수
- 5
- 조회수
- 418





