Description
I am facing the issue of application crash on replacing the host fragment Of Segmented Buttons
Below is my Layout configuration for the Segmented Button Group.
`
<com.addisonelliott.segmentedbutton.SegmentedButtonGroup
android:id="@+id/segmentedgroupjobs"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@color/white"
android:elevation="3dp"
android:orientation="horizontal"
app:borderColor="@color/blue"
app:borderWidth="1.2dp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_new_job_button"
app:position="1"
app:radius="20dp"
app:ripple="true"
app:rippleColor="@color/white"
app:selectedBackground="@color/blue"
app:selectedButtonRadius="20dp"
app:selectionAnimationDuration="250"
app:selectionAnimationInterpolator="fastOutSlowIn">
<com.addisonelliott.segmentedbutton.SegmentedButton
android:id="@+id/Invited_jobs"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginStart="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="0dp"
android:layout_marginBottom="1dp"
android:layout_weight="1"
app:selectedTextColor="@color/white"
app:text="@string/invitedJobs"
app:textColor="@color/blue"
/>
<com.addisonelliott.segmentedbutton.SegmentedButton
android:id="@+id/all_jobs"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:layout_weight="1"
android:gravity="center"
app:selectedTextColor="@color/white"
app:text="@string/publicJobs"
app:textColor="@color/blue"
/>
<com.addisonelliott.segmentedbutton.SegmentedButton
android:id="@+id/invited_jobs"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginStart="0dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginBottom="1dp"
android:layout_weight="1"
app:selectedTextColor="@color/white"
app:text="@string/applied_jobs"
app:textColor="@color/blue"
/>
</com.addisonelliott.segmentedbutton.SegmentedButtonGroup>`
Below Snippets Define The Usage inside fragments
-
The Initialization
`segmentedGroup = view!!.findViewById(R.id.segmentedgroupjobs) if (RoutingAppController.instance!!.role != "Teacher") { segmentedGroup.visibility= View.GONE }`
-
The Position Changed Listener
` if(RoutingAppController.instance!!.role =="Teacher") { segmentedGroup.setOnPositionChangedListener { position -> selectedButton = position when (position) { 0 -> { childFragmentManager.beginTransaction().hide(active) .show(invitedJobs).commit() active = invitedJobs } 1 -> { childFragmentManager.beginTransaction().hide(active) .show(otherJobs).commit() active = otherJobs } 2 -> { childFragmentManager.beginTransaction().hide(active) .show(appliedJobs).commit() active = appliedJobs } else -> { } } } }`
The Crash Stack is as below (SegmentedButtonGroup.java:507)
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.atomicskills.chatteach, PID: 30039 java.lang.IllegalArgumentException: Invalid child view for SegmentedButtonGroup. Only SegmentedButton's are valid children of the group at com.addisonelliott.segmentedbutton.SegmentedButtonGroup.addView(SegmentedButtonGroup.java:507) at android.view.ViewGroup.addView(ViewGroup.java:4960) at androidx.transition.TransitionUtils.createViewBitmap(TransitionUtils.java:138) at androidx.transition.TransitionUtils.copyViewImage(TransitionUtils.java:64) at androidx.transition.Visibility.onDisappear(Visibility.java:401) at androidx.transition.Visibility.createAnimator(Visibility.java:257) at androidx.transition.Transition.createAnimators(Transition.java:747) at androidx.transition.TransitionSet.createAnimators(TransitionSet.java:480) at androidx.transition.Transition.playTransition(Transition.java:1821) at androidx.transition.TransitionManager$MultiListener.onPreDraw(TransitionManager.java:301) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2898) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1821) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7916) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:980) at android.view.Choreographer.doCallbacks(Choreographer.java:804) at android.view.Choreographer.doFrame(Choreographer.java:739) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:965) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:7510) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
Also, I am using Add() of fragment transaction for the first time and replace the other times In A bottom Navigation view.
Before I used Hide Show Approach for fragment Transactions, It was working fine in that scenario.