@@ -382,16 +382,29 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
382382 */
383383 @JvmOverloads
384384 fun clearStack (transactionOptions : FragNavTransactionOptions ? = defaultTransactionOptions) {
385- if (currentStackIndex == NO_TAB ) {
385+ clearStack(currentStackIndex,transactionOptions)
386+ }
387+
388+ /* *
389+ * Clears the passed tab's stack to get to just the bottom Fragment. This will reveal the root fragment
390+ *
391+ * @param tabIndex Index of tab that needs to be cleared
392+ * @param transactionOptions Transaction options to be displayed
393+ */
394+ @JvmOverloads
395+ fun clearStack (tabIndex : Int , transactionOptions : FragNavTransactionOptions ? = defaultTransactionOptions) {
396+ if (tabIndex == NO_TAB ) {
386397 return
387398 }
388399
389400 // Grab Current stack
390- val fragmentStack = fragmentStacksTags[currentStackIndex ]
401+ val fragmentStack = fragmentStacksTags[tabIndex ]
391402
392403 // Only need to start popping and reattach if the stack is greater than 1
393404 if (fragmentStack.size > 1 ) {
394- val ft = createTransactionWithOptions(transactionOptions, true )
405+ // Only animate if we're clearing the current stack
406+ val shouldAnimate = tabIndex == currentStackIndex
407+ val ft = createTransactionWithOptions(transactionOptions,true , shouldAnimate)
395408
396409 // Pop all of the fragments on the stack and remove them from the FragmentManager
397410 while (fragmentStack.size > 1 ) {
@@ -657,10 +670,14 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
657670 setTransition(options.transition)
658671
659672 options.sharedElements.forEach { sharedElement ->
660- addSharedElement(
661- sharedElement.first,
662- sharedElement.second
663- )
673+ sharedElement.first?.let {
674+ sharedElement.second?.let { it1 ->
675+ addSharedElement(
676+ it,
677+ it1
678+ )
679+ }
680+ }
664681 }
665682
666683 when {
@@ -729,7 +746,7 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
729746
730747 fun getFragmentManagerForDialog (): FragmentManager {
731748 val currentFrag = this .currentFrag
732- return if (currentFrag?.isAdded == true ) {
749+ return if (currentFrag?.isAdded == true ) {
733750 currentFrag.childFragmentManager
734751 } else {
735752 this .fragmentManger
@@ -809,9 +826,9 @@ class FragNavController constructor(private val fragmentManger: FragmentManager,
809826 val stackArray = stackArrays.getJSONArray(x)
810827 val stack = Stack <String >()
811828 (0 until stackArray.length())
812- .map { stackArray.getString(it) }
813- .filter { ! it.isNullOrEmpty() && ! " null" .equals(it, ignoreCase = true ) }
814- .mapNotNullTo(stack) { it }
829+ .map { stackArray.getString(it) }
830+ .filter { ! it.isNullOrEmpty() && ! " null" .equals(it, ignoreCase = true ) }
831+ .mapNotNullTo(stack) { it }
815832
816833 fragmentStacksTags.add(stack)
817834 }
0 commit comments