Archived
Updated EventPageFragment.kt to have access to its own ViewModel and, by extension, its own reference to the database, which forgoes the need to transport data from EventFragment.kt through StudIPEventPageAdapter.kt to EventPageFragment.kt and allows for filtering for a specific day's items through the database rather than needing to iterate through the list via an extension function manually. Also implemented DiffUtil to perform individual updates rather than calling notifyDataSetChanged() every time a single item has been changed.
This commit is contained in:
@@ -4,26 +4,25 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.denizk0461.studip.adapter.StudIPEventPageAdapter
|
||||
import com.denizk0461.studip.adapter.StudIPEventItemAdapter
|
||||
import com.denizk0461.studip.databinding.RecyclerViewBinding
|
||||
import com.denizk0461.studip.model.StudIPEvent
|
||||
import com.denizk0461.studip.sheet.ScheduleUpdateSheet
|
||||
import com.denizk0461.studip.viewmodel.EventPageViewModel
|
||||
|
||||
/**
|
||||
* Fragment that is instantiated by [StudIPEventPageAdapter] to display individual days' pages and
|
||||
* their events.
|
||||
*
|
||||
* @param events list of all events (still not filtered by day at this point)
|
||||
* @param currentDay current day that is used to show only events of a given day (0 = Monday,
|
||||
* 4 = Friday)
|
||||
* @param onClickListener used for listening to clicks and long presses
|
||||
* @param currentDay current day that is used to show only events of a given day (0 = Monday,
|
||||
* 4 = Friday)
|
||||
*/
|
||||
class EventPageFragment(
|
||||
private val events: List<StudIPEvent>,
|
||||
private val currentDay: Int,
|
||||
private val onClickListener: StudIPEventItemAdapter.OnClickListener,
|
||||
) : AppFragment() {
|
||||
) : AppFragment(), StudIPEventItemAdapter.OnClickListener {
|
||||
|
||||
// Nullable view binding reference
|
||||
private var _binding: RecyclerViewBinding? = null
|
||||
@@ -34,6 +33,14 @@ class EventPageFragment(
|
||||
*/
|
||||
private val binding get() = _binding!!
|
||||
|
||||
// View model reference for providing access to the database
|
||||
private val viewModel: EventPageViewModel by viewModels()
|
||||
|
||||
/**
|
||||
* Adapter that manages the page's items
|
||||
*/
|
||||
private val eventAdapter = StudIPEventItemAdapter(currentDay, this)
|
||||
|
||||
// Instantiate the view binding
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
_binding = RecyclerViewBinding.inflate(inflater, container, false)
|
||||
@@ -49,12 +56,32 @@ class EventPageFragment(
|
||||
|
||||
/*
|
||||
* Create new adapter for every page. Attribute position denotes day that will be set up
|
||||
* by the newly created adapter (0 = Monday, 4 = Friday)
|
||||
* by the newly created adapter (0 = Monday, 4 = Friday, 6 = Sunday)
|
||||
*/
|
||||
adapter = StudIPEventItemAdapter(events, currentDay, onClickListener) // TODO check if empty
|
||||
adapter = eventAdapter
|
||||
|
||||
// Animate creation of new page
|
||||
scheduleLayoutAnimation()
|
||||
}
|
||||
|
||||
// Set up LiveData observer to refresh the view on update
|
||||
viewModel.getEventsForDay(currentDay).observe(viewLifecycleOwner) { events ->
|
||||
// eventAdapter.setNewItems(events)
|
||||
eventAdapter.setNewData(events)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(event: StudIPEvent) {
|
||||
// TODO implement functionality or delete
|
||||
}
|
||||
|
||||
override fun onLongClick(event: StudIPEvent): Boolean {
|
||||
// Open a bottom sheet to edit the event
|
||||
openBottomSheet(ScheduleUpdateSheet(event, onUpdate = { eventToUpdate ->
|
||||
viewModel.update(eventToUpdate)
|
||||
}, onDelete = { eventToDelete ->
|
||||
viewModel.delete(eventToDelete)
|
||||
}))
|
||||
return true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user