Well, i had gone through every portal to know the issue but hadn't worked, Actually it crashed randomly.
Exception is as follows,
Fatal Exception: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid
view holder adapter positionkj8{1734d08 position=5 id=-1, oldPos=0, pLpos:0 scrap [attachedScrap] tmpDetached no parent} androidx.recyclerview.widget.RecyclerView{5662a59 VFED..... ......ID 0,0-0,0 #7f0b0f5c app:id/signUpFormRecyclerView}, adapter:k06@73d561e, layout:androidx.recyclerview.widget.LinearLayoutManager@e8efeff, context:android.view.ContextThemeWrapper@2562378
at androidx.recyclerview.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:6156)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6339)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3686)
at android.view.View.measure(View.java:27131)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
at com.google.android.material.appbar.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:99)
at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:2003)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:831)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.Custom.consumer.ui.view.CustomFrameLayout.onMeasure(CustomFrameLayout.java:69)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:27131)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measure(BasicMeasure.java:466)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measureChildren(BasicMeasure.java:134)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:278)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:27131)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:1175)
at android.view.View.measure(View.java:27131)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4187)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2936)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3204)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2618)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9971)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:744)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8633)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
code: Fragment code is as follows,
class OnBoardingFragment : BaseFragment() {
private val onBoardingConfig: OnBoardingFragmentInitConfig by lazy {
requireArguments().getParcelable(Keys.INIT_CONFIG)!!
}
private val adapterItemList: ArrayList<EditViewType> = ArrayList()
private val viewViewModel: OnBoardingViewModel by fragmentViewModelBuilder {
OnBoardingViewModel(
onBoardingConfig,
adapterItemList,
onBoardingReferralPresenter
)
}
private val onBoardingReferralPresenter: OnBoardingReferralPresenter by lazy {
OnBoardingReferralPresenter(authNavigatorV2)
}
private val adapter by lazy {
ProfileAdapter(
adapterItemList,
viewViewModel,
lifecycleScope
)
}
private lateinit var bindingCollapse: DesignCollapsingtoolbarBinding
private lateinit var binding: DesignSignupOnboardingBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
bindingCollapse = DesignCollapsingtoolbarBinding.inflate(inflater, container, false)
return bindingCollapse.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
onBoardingReferralPresenter.setReferralPresenterToViewModelCallBack(viewViewModel) initView()
if (null == savedInstanceState)
viewViewModel.startViewModel()
}
private fun initView() {
setUpViewStub()
setUpRecyclerView()
startObservers()
}
private fun setUpViewStub() {
bindingCollapse.commonHeaderViewstub.viewStub?.let {
it.layoutResource = R.layout.design_signup_onboarding
it.setOnInflateListener { _, inflated ->
val stubBinding = DataBindingUtil.bind<DesignSignupOnboardingBinding>(inflated)
if (null == stubBinding) {
requireActivity().onBackPressed()
return@setOnInflateListener
}
binding = stubBinding
}
it.inflate()
}
}
private fun startObservers() {
viewViewModel.loadAdapterItemList.observe(viewLifecycleOwner) {
adapter.notifyDataSetChanged()
}
viewViewModel.notifyPosition.observe(viewLifecycleOwner) {
adapter.notifyItemChanged(it)
}
}
private fun setUpRecyclerView() {
with(binding.signUpFormRecyclerView) {
layoutManager = LinearLayoutManagerWrapper(context, LinearLayoutManager.VERTICAL, false)
itemAnimator = null
adapter = this@OnBoardingFragment.adapter
}
}
companion object {
private const val SOURCE = "source"
private const val DIALOG_ALERT = 9899
const val SCREEN_NAME = GaScreen.ON_BOARDING_PAGE
fun getInstance(
onBoardingInitModel: OnBoardingFragmentInitConfig?,
source: Int,
): OnBoardingFragment {
val fragment = OnBoardingFragment()
val bundle = Bundle()
bundle.putInt(SOURCE, source)
bundle.putParcelable(Keys.INIT_CONFIG, onBoardingInitModel)
fragment.arguments = bundle
return fragment
}
}
}
xml code is as follows,
design_collapsingtoolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<CusotmFrameLayout
android:id="@+id/commonHeaderRoot"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/commonHeaderCoordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<include
android:id="@+id/comonHeaderCollapsingToolbar"
layout="@layout/collapsing_toolbar" />
<ViewStub
android:id="@+id/commonHeaderViewstub"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inflatedId="@+id/commonHeaderInflatedView"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<CustomTextView
android:id="@+id/commonHeaderRightItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"/>
</CusotmFrameLayout>
design_signup_onboarding.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/AppTheme.MaterialComponents">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/signUpFormRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_above="@+id/signupCreateAccount" />
<CustomButtonView
android:id="@+id/signupCreateAccount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/signupTermsCondition"
tools:text="Create Account" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/signupTermsCondition"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>