1- package com.example.mynotes.ui.fragments
1+ package com.example.mynotes.ui.fragments.notes
22
33import android.content.res.Configuration
44import android.os.Bundle
@@ -17,12 +17,13 @@ import com.example.mynotes.databinding.FragmentNotesBinding
1717import com.example.mynotes.viewmodel.NotesViewModel
1818import com.google.android.material.dialog.MaterialAlertDialogBuilder
1919import com.google.android.material.snackbar.Snackbar
20- import kotlinx.android.synthetic.main.notes_lyt.view .*
20+ import kotlinx.android.synthetic.main.fragment_notes .*
2121
2222class NotesFragment : Fragment () {
2323
2424 private lateinit var binding: FragmentNotesBinding
2525 private lateinit var viewModel: NotesViewModel
26+ private lateinit var noteadapter: NotesAdapter
2627
2728 override fun onCreateView (
2829 inflater : LayoutInflater , container : ViewGroup ? ,
@@ -34,12 +35,13 @@ class NotesFragment : Fragment() {
3435
3536 setHasOptionsMenu(true )
3637
37- val adapter = NotesAdapter ()
38+ swipeToDeleteNote()
39+ noteadapter = NotesAdapter ()
3840
3941 binding.apply {
4042
4143 recyclerView.layoutManager = LinearLayoutManager (requireContext())
42- recyclerView.adapter = adapter
44+ recyclerView.adapter = noteadapter
4345 recyclerView.setHasFixedSize(true )
4446
4547 floatingActionButton.setOnClickListener {
@@ -52,13 +54,54 @@ class NotesFragment : Fragment() {
5254 binding.imageLlyt.visibility = View .VISIBLE
5355 } else {
5456 binding.recyclerView.visibility = View .VISIBLE
55- adapter.setNotes (it)
57+ noteadapter.differ.submitList (it)
5658 }
5759 })
5860
5961 return binding.root
6062 }
6163
64+ private fun swipeToDeleteNote () {
65+
66+ val itemTouchHelperCallback = object : ItemTouchHelper .SimpleCallback (
67+ ItemTouchHelper .UP or ItemTouchHelper .DOWN ,
68+ ItemTouchHelper .LEFT or ItemTouchHelper .RIGHT
69+ ) {
70+ override fun onMove (
71+ recyclerView : RecyclerView ,
72+ viewHolder : RecyclerView .ViewHolder ,
73+ target : RecyclerView .ViewHolder ,
74+ ): Boolean {
75+ return true
76+ }
77+
78+ override fun onSwiped (viewHolder : RecyclerView .ViewHolder , direction : Int ) {
79+ // get current item
80+ val position = viewHolder.adapterPosition
81+ val note = noteadapter.differ.currentList[position]
82+ viewModel.deleteNote(note)
83+
84+ Snackbar .make(
85+ binding.root,
86+ getString(R .string.note_deleted),
87+ Snackbar .LENGTH_LONG
88+ )
89+ .apply {
90+ setAction(" Undo" ) {
91+ viewModel.insertNote(note)
92+ image_llyt.visibility = View .GONE
93+ }
94+ show()
95+ }
96+ }
97+ }
98+
99+ // attach swipe to recyclerview
100+ ItemTouchHelper (itemTouchHelperCallback).apply {
101+ attachToRecyclerView(binding.recyclerView)
102+ }
103+ }
104+
62105 // navigate to addnotes fragment
63106 private fun goToAddNoteFragment () {
64107 findNavController().navigate(NotesFragmentDirections .actionNotesFragmentToAddNoteFragment())
0 commit comments