Как исправить Невозможно вызвать этот метод, пока RecyclerView вычисляет макет или прокручивает - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть макет, в котором у меня есть recyclerView, который включает две вкладки (CustomView) и на основе выбора вкладок я хочу обновить пользовательский интерфейс под этими вкладками.Но, как было сказано в заголовке, когда я пытаюсь уведомить данные, происходит сбой приложения.

Я проверил похожие посты и попробовал следующие предложения: A) Чтобы использовать runOnUiThread для вызова notifyDataSetChange B) Чтобы использовать Handler и снова вызвать notifyDataSetChange()

Кроме того, я пытаюсь использовать notifyItemChanged(position), но снова происходит сбой приложения.

Следующий код показывает метод интерфейса вкладок. Я также пытался реализовать его на activity, но приложение снова падает.При следующем коде происходит сбой приложения, когда я пытаюсь изменить выбранную вкладку во второй раз.

Код адаптера Recycler:

   override fun onSelectedTab(selectedTab: String, selectedTransaction: String) {
        presetPrepayMainModelList[adapterPosition].transactionTypeHashMap = mapOf(TRANSACTION_TYPE.ordinal to selectedTab)
        if (selectedTransaction == "preset") || selectedTransaction == "prepay") {
            presetPrepaySelectedValues.selectedTransactionType = selectedTransaction
            onPresetPrepayMainRecyclerViewListener.onTransactionTypeSelected(selectedTransaction, presetPrepayMainModelList)
            notifyItemRangeChanged(adapterPosition + 1, presetPrepayMainModelList.size)
        } else {
            presetPrepaySelectedValues.selectedTransactionLimit = selectedTransaction
            notifyItemRangeChanged(adapterPosition + 2, presetPrepayMainModelList.size)
        }
    }

Ошибка:

    Process: , PID: 19535
    java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling android.support.v7.widget.RecyclerView{f026357 VFED..... .F....ID 0,399-1080,1515 #7f0a00ec app:id/presetPrepayMainRecyclerView}, adapter:.modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.adapter.PresetPrepayMainRecyclerViewAdapter@a92fe44, layout:android.support.v7.widget.LinearLayoutManager@6a72b2d, context:.modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.PresetPrepayActivity@85bcfe2
        at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:2880)
        at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(RecyclerView.java:5292)
        at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(RecyclerView.java:12012)
        at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(RecyclerView.java:12002)
        at android.support.v7.widget.RecyclerView$Adapter.notifyItemRangeChanged(RecyclerView.java:7132)
        at .modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.adapter.PresetPrepayMainRecyclerViewAdapter$SelectTransactionTypeViewHolder.onSelectedTab(PresetPrepayMainRecyclerViewAdapter.kt:124)
        at .custom_view.TwoOptionsTabCustomView.selectTab(TwoOptionsTabCustomView.kt:109)
        at .custom_view.TwoOptionsTabCustomView.initTwoOptionsTabCustomViewWithImageOnTheTopSide(TwoOptionsTabCustomView.kt:82)
        at .modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.adapter.PresetPrepayMainRecyclerViewAdapter$SelectTransactionTypeViewHolder.setTheValuesToPresetPrepayTabs(PresetPrepayMainRecyclerViewAdapter.kt:108)
        at .modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.adapter.PresetPrepayMainRecyclerViewAdapter$SelectTransactionTypeViewHolder.bindData(PresetPrepayMainRecyclerViewAdapter.kt:81)
        at .modules.main_flow.fragments.pumps.activities.pump.activities.preset_prepay.adapter.PresetPrepayMainRecyclerViewAdapter.onBindViewHolder(PresetPrepayMainRecyclerViewAdapter.kt:58)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
        at android.view.View.measure(View.java:20151)
        at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at and``

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...