Не удается создать экземпляр класса при использовании onSaveInstanceState с Viewmodel

#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?)