У меня есть макет, в котором у меня есть 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``