#android #kotlin #android-recyclerview
Вопрос:
я пытаюсь сохранить состояние CardStackView. Это ViewModel
class SpotViewModel(app: Application): ViewModel() {
//for onSaveInstanceState***********************************
var listState : Parcelable? =null
private val spotRepository: SpotRepository = SpotRepository(app)
fun insertSpot(spot: Spot) = viewModelScope.launch {
spotRepository.insertSpot(spot)
}
fun updateSpot(spot:Spot) = viewModelScope.launch {
spotRepository.updateSpot(spot)
}
fun deleteSpot(spot:Spot) = viewModelScope.launch {
spotRepository.deleteSpot(spot)
}
fun getAllSpot() : LiveData<List<Spot>> = spotRepository.getAllSpot()
class SpotViewModelFactory(private val application: Application) : ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if(modelClass.isAssignableFrom(SpotViewModel::class.java)){
return SpotViewModel(application) as T
}
throw IllegalArgumentException("Unable construct viewmodel")
}
}
}
это фрагмент
class HomeFragment : Fragment(),CardStackListener {
private lateinit var drawerLayout : DrawerLayout
private lateinit var cardStackView : CardStackView
private lateinit var manager :CardStackLayoutManager
private lateinit var adapter : CardStackAdapter
private lateinit var getview : View
private val viewModel by navGraphViewModels<SpotViewModel>(R.id.mobile_navigation)
private val spotViewModel: SpotViewModel by lazy {
ViewModelProvider(
this,
SpotViewModel.SpotViewModelFactory(requireActivity().application)
)[SpotViewModel::class.java]
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
cardStackView = view.findViewById(R.id.card_stack_view)
drawerLayout = view.findViewById(R.id.drawer_layout)
manager = CardStackLayoutManager(requireContext(), this)
setupCardStackView()
setupButton()
if (viewModel.listState != null){
cardStackView.layoutManager?.onRestoreInstanceState(viewModel.listState)
viewModel.listState = null
}
}
когда фрагмент уничтожен, я сохранил состояние
override fun onDestroyView() {
super.onDestroyView()
viewModel.listState = cardStackView.layoutManager?.onSaveInstanceState()
Log.e("State","HomeFragment Destroys")
}
он работает с обычным RecyclerView, но с CardStackView-нет.как я могу это исправить или найти другой способ сохранить состояние CardStackView. пожалуйста, помогите мне!
Спасибо за все!Всем хорошего дня!
Комментарии:
1. Вы должны использовать существующие методы, чтобы узнать, когда следует сохранить и восстановить состояние вашего представления.
override fun onSaveInstanceState(outState: Bundle)
иoverride fun onViewStateRestored(savedInstanceState: Bundle?)