Хочу сделать, чтобы при нажатии на элемент открывался фрагмент, где будет отображаться текст из этого элемента. Подобные темы читала, но не могу понять. Нужен интерфейс в адаптере, метод которого мы переопределяем в холдере... но как передать данные в активити, чтобы он пробросил их следующему фрагменту?
class NotesFragment : Fragment() {
private var binding: FragmentNotesBinding? = null
private val adapter = NoteAdapter()
interface OpenFragment {
fun addEditFragment() {
}
fun addDetailFragment(detail: String) {}
}
companion object {
fun newInstance() = NotesFragment()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentNotesBinding.inflate(layoutInflater)
return binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding!!.rcList.layoutManager = GridLayoutManager(context, 2)
binding!!.rcList.adapter = adapter
binding!!.bAdd.setOnClickListener() {
(activity as OpenFragment).addEditFragment()
}
}
override fun onResume() {
super.onResume()
setFragmentResultListener("key") { key, bundle ->
val result = bundle.getString("bundleKey")
if (result != null) {
adapter.addNote(result)
}
}
}
override fun onDestroy() {
super.onDestroy()
binding = null
}
}
Адаптер:
class NoteAdapter : RecyclerView.Adapter() {
private val noteList = ArrayList()
class NoteHolder(item: View) : RecyclerView.ViewHolder(item) {
private val binding = MyNoteItemBinding.bind(item)
fun bind(note: String) = with(binding) {
tvMessage.text = note
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.my_note_item, parent, false)
return NoteHolder(view)
}
override fun onBindViewHolder(holder: NoteHolder, position: Int) {
holder.bind(noteList[position])
}
override fun getItemCount(): Int {
return noteList.size
}
fun addNote(note: String) {
noteList.add(note)
notifyDataSetChanged()
}
}