Работа с Retrofit, фрагментами и ViewPager

Я пишу приложение с расписанием моего ВУЗа, расписание хранится на сервере в виде:

"numerator": [
           [
              {
                 "date": "6.11.2022"
                 "number": "1",
                 "name": "Название предмета",
                 "classroom": "326",
                 "group": "41201"
                 "start_time": "08:00",
                 "end_time": "09:25",
                 "lecturer": "_____ _____ _____",
                 "type": "Лекции дистант Математика Дистант"
              } ... // Занятия
           ], ... // Дни недели по порядку
          ]
        "denominator":[
          [
             {
                "date": "15.11.2022"
                "number": "1",
                "name": "Название предмета",
                "classroom": "",
                "group": "41201"
                "start_time": "08:00",
                "end_time": "09:25",
                "lecturer": "_____ _____ _____",
                "type": "Лекции дистант Математика Дистант"
             } ...
          ], ...
        ]

У меня есть активность ScheduleActivity, состоящая из TabLayout и ViewPager. На ViewPager - фрагменты для каждого дня недели, в этих фрагментах хранится расписание для того или иного дня. До изменений, на каждом фрагменте создавался Retrofit Builder и для каждого дня расписание с сервера запрашивалось именно в фрагменте. Я решил, что это нерационально и так "насиловать" сервер не нужно, поэтому пришел к выводу, что запрос нужно сделать единожды, при инициализации активности, а далее передавать полученный список в фрагменты. Так вот, вопрос, все ли правильно я сделал в коде?

package com.example.petrsushedule.Activities

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager.widget.ViewPager
import com.example.petrsushedule.Adapter.ScheduleAdapter
import com.example.petrsushedule.Adapter.SchedulePagerAdapter
import com.example.petrsushedule.Fragments.MondayFragment
import com.example.petrsushedule.Fragments.TuesdayFragment
import com.example.petrsushedule.Fragments.WednesdayFragment
import com.example.petrsushedule.Interface.ScheduleApi
import com.example.petrsushedule.Interface.WeekApi
import com.example.petrsushedule.Model.ScheduleItem
import com.example.petrsushedule.Model.ScheduleResponse
import com.example.petrsushedule.Model.WeekResponse
import com.example.petrsushedule.R
import com.google.android.material.tabs.TabLayout
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class ScheduleActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_schedule)

        val tabLayout = findViewById<TabLayout>(R.id.tabLayout)
        val viewPager = findViewById<ViewPager>(R.id.viewPager)
        val adapter = SchedulePagerAdapter(supportFragmentManager)

        val groupNumber = intent.getStringExtra("GROUP_NUMBER") ?: ""

        var scheduleList: List<List<ScheduleItem>> = emptyList()

        val retrofit = Retrofit.Builder()
            .baseUrl("https://petrsu.egipti.com/api/v2/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        val weekApi = retrofit.create(WeekApi::class.java)
        val weekCall = weekApi.getCurrentWeek()

        weekCall.enqueue(object : Callback<WeekResponse> {
            override fun onResponse(call: Call<WeekResponse>, response: Response<WeekResponse>) {
                if (response.isSuccessful) {
                    val weekResponse = response.body()
                    weekResponse?.let { week ->
                        val currentWeek = week.week

                        val scheduleApi = retrofit.create(ScheduleApi::class.java)
                        val scheduleCall = scheduleApi.getScheduleForGroup(groupNumber)

                        scheduleCall.enqueue(object : Callback<ScheduleResponse> {
                            override fun onResponse(
                                call: Call<ScheduleResponse>,
                                response: Response<ScheduleResponse>
                            ) {
                                if (response.isSuccessful) {
                                    val scheduleResponse = response.body()
                                    scheduleResponse?.let {
                                        scheduleList =
                                        if (currentWeek == "numerator") {
                                            scheduleResponse.numerator
                                        } else {
                                            scheduleResponse.denominator
                                        }

                                        val mondayFragment = MondayFragment(scheduleList[0])
                                        val tuesdayFragment = TuesdayFragment(scheduleList[1])
                                        val wednesdayFragment = WednesdayFragment(scheduleList[2])

                                        adapter.addFragment(mondayFragment, "ПН")
                                        adapter.addFragment(tuesdayFragment, "ВТ")
                                        adapter.addFragment(wednesdayFragment, "СР")
                                    }
                                }
                            }

                            override fun onFailure(call: Call<ScheduleResponse>, t: Throwable) {

                            }
                        })
                    }
                }
            }

            override fun onFailure(call: Call<WeekResponse>, t: Throwable) {

            }
        })

        adapter.notifyDataSetChanged()

        viewPager.adapter = adapter
        tabLayout.setupWithViewPager(viewPager)

        val backButton: Button = findViewById(R.id.backButton)

        backButton.setOnClickListener {
            val sharedPreferences = getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE)
            val editor = sharedPreferences.edit()
            editor.putString("userGroup", null)
            editor.apply()
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }
    }
}

Конкретно интересует момент с добавлением фрагментов в методе onResponse. Потому что этот код работает только в пределах этой функции и мне интересно, нормально ли это и все ли правильно?

val mondayFragment = MondayFragment(scheduleList[0])
val tuesdayFragment = TuesdayFragment(scheduleList[1])
val wednesdayFragment = WednesdayFragment(scheduleList[2])

adapter.addFragment(mondayFragment, "ПН")
adapter.addFragment(tuesdayFragment, "ВТ")
adapter.addFragment(wednesdayFragment, "СР")

Ответы (0 шт):