Какая логика необходима для того, чтобы CheckBox(true) добавлял выбранный элемент RecyclerView во фрагмент Favourite?
Уважаемые разработчики. Помогите, пожалуйста, с реализацией для CheckBox. Задача состоит в следующем: при нажатии CheckBox, который является одним из элементов CardView, он должен добавлять этот CardView, в котором был нажат, во фрагмент Favourites. Демонстрирую код:
AllFragment.tk
class AllFragment : Fragment() {
private var layoutManager: RecyclerView.LayoutManager? = null
private var adapter: RecyclerView.Adapter<RecyclerAdapter.ViewHolder>? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
layoutManager = LinearLayoutManager(requireActivity())
recyclerView?.layoutManager = layoutManager
adapter = RecyclerAdapter()
recyclerView?.adapter = adapter
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_all, container, false)
}
}
FavouritesFragment.kt
class FavouritesFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_favourites, container, false)
}
}
RecyclerAdapter.kt
class RecyclerAdapter: RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
private var titles = arrayOf("Chapter One", "Chapter Two", "Chapter Three", "Chapter Four", "Chapter Five", "Chapter Six", "Chapter Seven", "Chapter Eight", "Chapter Nine", "Chapter Ten")
private var description = arrayOf("This chapter will tell us about something strange, horrible and fantastic, beautiful and peaceful.", "This chapter will tell us about something strange, horrible and fantastic!", "This chapter will tell us about something strange, horrible and fantastic, differ and deeper, honorably and beautiful, lovely and funny.", "This chapter will tell us about something horrible.", "This chapter will tell us about something strange, horrible and fantastic, enthusiastic!", "This chapter will tell us about something fantastic, funny, lovely, erudition, peaceful.", "This chapter will tell us about something strange, horrible and fantastic, beautiful!", "This chapter will tell us about something strange, horrible and peaceful.", "This chapter will tell us about something strange, horrible.", "This chapter will tell us about something strange, horrible and fantastic.")
private var date = arrayOf("22.05.2021", "23.05.2021", "24.05.2021", "15.03.2021", "14.03.2021", "12.02.2021", "19.01.2021", "09.01.2021", "15.09.2021", "11.07.2021")
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.model, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder, position: Int) {
holder.itemTitle.text = titles[position]
holder.itemDescription.text = description[position]
holder.itemDate.text = date[position]
}
override fun getItemCount(): Int {
return titles.size
}
inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var itemTitle: TextView
var itemDescription: TextView
var itemDate: TextView
var itemLike: CheckBox
init {
itemTitle = itemView.findViewById(R.id.itemTitle)
itemDescription = itemView.findViewById(R.id.itemDescription)
itemDate = itemView.findViewById(R.id.itemDate)
itemLike = itemView.findViewById(R.id.itemLike)
itemView.setOnClickListener {
val position: Int = absoluteAdapterPosition
Toast.makeText(itemView.context, "You clicked on ${titles[position]}", Toast.LENGTH_LONG).show()
}
itemLike.setOnCheckedChangeListener { checkBox, isChecked ->
if (isChecked){
Toast.makeText(itemLike.context,"Item added to Favourites", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(itemLike.context,"Item removed from Favourites", Toast.LENGTH_SHORT).show()
}
}
}
}
}
ViewPagerAdapter.kt
class ViewPagerAdapter(supportFragmentManager: FragmentManager) :
FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val mFragmentList = ArrayList<Fragment>()
private val mFragmentTitleList = ArrayList<String>()
override fun getCount(): Int {
return mFragmentList.size
}
override fun getItem(position: Int): Fragment {
return mFragmentList[position]
}
override fun getPageTitle(position: Int): CharSequence {
return mFragmentTitleList[position]
}
fun addFragment(fragment: Fragment, title: String) {
mFragmentList.add(fragment)
mFragmentTitleList.add(title)
}
}
При нажатии на CheckBox(♥) в выбранном элементе, добавлять этот элемент во вкладку Favourites.

Если сможете дать развернутый ответ, буду очень признателен.
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
- Храните ваши данные не в несвязанных переменных-списках, а в БД, в одной таблице, с ID-шниками.
- По нажатию на избранное меняйте значение избранного по ID с true на false или наоборот.
- Заново получите данные из БД для списка, отобразите корректное значение избранности
- Во фрагменте избранного из БД получайте только избранные. Обновляйте список по событиям изменений в БД
- Адаптер для обоих фрагментов будет один и тот же