fix: Avoid giving away context
This commit is contained in:
@@ -20,6 +20,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.navigation.NavigationView
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.lsp.view.YandViewApplication
|
||||
import com.lsp.view.R
|
||||
import com.lsp.view.activity.BaseActivity
|
||||
@@ -42,14 +43,10 @@ class MainActivity : BaseActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
viewModel = MainViewModel.provideFactory((application as YandViewApplication).repository, this,this).create(MainViewModel::class.java)
|
||||
|
||||
toolbar = findViewById(R.id.toolbar)
|
||||
setSupportActionBar(toolbar)
|
||||
val appbar = findViewById<AppBarLayout>(R.id.appbar)
|
||||
val nowHeight = appbar.layoutParams.height
|
||||
appbar.layoutParams.height = (application as YandViewApplication).statusBarHeight()+nowHeight
|
||||
|
||||
viewModel = MainViewModel.provideFactory((application as YandViewApplication).repository, this,this).create(MainViewModel::class.java)
|
||||
//刷新
|
||||
val refresh =
|
||||
findViewById<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>(R.id.swipeRefreshLayout)
|
||||
@@ -57,6 +54,14 @@ class MainActivity : BaseActivity() {
|
||||
viewModel.uiState.value.isRefreshing.observe(this) {
|
||||
refresh.isRefreshing = it
|
||||
}
|
||||
viewModel.errorMessage.observe(this){
|
||||
Snackbar.make(refresh,it,Snackbar.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
val appbar = findViewById<AppBarLayout>(R.id.appbar)
|
||||
val nowHeight = appbar.layoutParams.height
|
||||
appbar.layoutParams.height = (application as YandViewApplication).statusBarHeight()+nowHeight
|
||||
|
||||
|
||||
refresh.setOnRefreshListener {
|
||||
viewModel.fetchPostByRefresh()
|
||||
|
||||
@@ -2,16 +2,15 @@ package com.lsp.view.model
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.os.Message
|
||||
import android.widget.Toast
|
||||
import androidx.lifecycle.AbstractSavedStateViewModelFactory
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.lsp.view.activity.main.PostAdapter
|
||||
import com.lsp.view.repository.PostRepository
|
||||
import androidx.savedstate.SavedStateRegistryOwner
|
||||
import com.lsp.view.repository.bean.YandPost
|
||||
import com.lsp.view.repository.exception.NetworkErrorException
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -21,12 +20,16 @@ import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class MainViewModel(private val repository: PostRepository,private val context: Context):ViewModel() {
|
||||
class MainViewModel(private val repository: PostRepository,context: Context):ViewModel() {
|
||||
private val _uiState = MutableStateFlow(UiState())
|
||||
val uiState:StateFlow<UiState> = _uiState.asStateFlow()
|
||||
private var fetchJob: Job? = null
|
||||
val adapter = PostAdapter(context)
|
||||
private val TAG = this::class.java.simpleName
|
||||
private val _errorMessage = MutableLiveData<String>()
|
||||
val errorMessage
|
||||
get() = _errorMessage as LiveData<String>
|
||||
|
||||
|
||||
companion object {
|
||||
fun provideFactory(
|
||||
@@ -86,9 +89,7 @@ class MainViewModel(private val repository: PostRepository,private val context:
|
||||
}
|
||||
|
||||
}catch (e:NetworkErrorException){
|
||||
launch(Dispatchers.Main){
|
||||
Toast.makeText(context,e.message,Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
_errorMessage.postValue(e.message.toString())
|
||||
}
|
||||
|
||||
_uiState.value.isRefreshing.postValue(false)
|
||||
|
||||
Reference in New Issue
Block a user