Я хочу использовать архитектуру MVVM, у меня есть пейджер с двумя фрагментами. каждый фрагмент имеет RecyclerView. Я создал класс модели представления, который расширяет AndroidViewModel, потому что мне нужно было передать контекст в мой репозиторий, который получает данные из класса API, который получает данные с сервера, используя залп. Я ожидал, что когда я поверну свой телефон, мой класс ViewModel не будет вызван, но на основании заданных мной журналов, кажется, что когда я поверну телефон, все снова запустится.
все в порядке? или у меня что-то не так?
это мои коды фрагментов:
val viewModel: Fragment1ViewModel =
ViewModelProviders.of(this).get(Fragment1ViewModel(Application())::class.java)
viewModel.getData().observe(this, Observer {
Log.i("Log","data is Loaded in activity")
})
это коды классов ViewModel:
class Fragment1ViewModel(application: Application) : AndroidViewModel(application) {
private val repository=Repository(application)
fun getData():LiveData<String>{
Log.i("Log","get data in view model")
return repository.getListItem()
}
}
это мои коды хранилища:
class Repository(private val context: Context) {
companion object {
private lateinit var serverFetch: ServerFetch
}
private fun setContext() {
serverFetch = ServerFetch(context)
}
fun getListItem():LiveData<String>{
setContext()
return serverFetch.getData()
}
}
и это мой класс ServerFetch, который работает как API для хранилища:
class ServerFetch(private val context: Context) {
private val api: String = "https://jsonplaceholder.typicode.com/posts"
private val result = MutableLiveData<String>()
private fun connect() {
val request = StringRequest(Request.Method.GET, api, Response.Listener {
Log.i("Log", "ServerFetch Successfully")
result.value = it
}, Response.ErrorListener {
Log.i("Log", "ServerFetch field: ${it.toString()}")
})
val queue = Volley.newRequestQueue(context)
queue.add(request)
}
fun getData(): LiveData<String> {
connect()
return result
}
}
, а вот мои журналы, когда приложение будет запущено в первый раз:
I/Log: get data in view model
I/Log: ServerFetch Successfully
I/Log: data is Loaded in activity
и это мои журналы, когда я поворачиваю телефон
I/Log: get data in view model
I/Log: ServerFetch Successfully
I/Log: data is Loaded in activity