在导航控制器上添加片段而不是替换片段?
Posted
技术标签:
【中文标题】在导航控制器上添加片段而不是替换片段?【英文标题】:Add fragment on navigation controller instead of replace fragment? 【发布时间】:2019-10-02 05:25:17 【问题描述】:我正在使用导航控件(android 架构)。我使用了一些演示并创建了导航架构。但问题是,片段每次都会被召回,就像:当你从任何片段返回时替换片段。那么我该如何阻止这种情况,以及如何设置添加片段而不是替换片段之类的行为。
我在网络上发现了这个问题,但没有人告诉我如何在导航控件上添加/替换片段。我尝试使用片段 ID 来获取添加片段方法,但没有成功。
-
这是我的导航主机 xml:我一次又一次地添加一个片段
具有日志记录生命周期。
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/questionanswer">
<fragment
android:id="@+id/questionanswer"
android:name="com.softtech360.totalservey.fragment.QuestionAnswer"
android:label="fragment_first"
tools:layout="@layout/questionanswer" >
<action
android:id="@+id/action_questionanswer_to_questionanswer"
app:destination="@id/questionanswer"
/>
</fragment>
</navigation>
-
我创建了一个按钮,每次我调用这个按钮来触发函数并交换主机片段上的片段:
val navController = Navigation.findNavController(activity!!,R.id.navhost_fragment)
navController.navigate(R.id.questionanswer)
// using this i swap the fragment on host fragment.
【问题讨论】:
找到解决办法了吗? 您遇到的实际问题是什么?如果您实际上是saving your state,那么无论您使用添加还是替换,您的片段都将处于完全相同的状态。 【参考方案1】:试试这个:
<action
android:id="@+id/action_questionanswer_to_questionanswer"
app:popUpTo="@+id/questionanswer"/>
而不是
<action
android:id="@+id/action_questionanswer_to_questionanswer"
app:destination="@id/questionanswer"/>
然后:
navController.navigate(R.id.action_questionanswer_to_questionanswer)
找到这个here
【讨论】:
【参考方案2】:您需要使用popUpTo
和popUpToInclusive
来清除backstack。检查Android Developers docs
【讨论】:
【参考方案3】:试试这个,不要将目的地更改为 popUpTop。
navController.navigate(R.id.action_questionanswer_to_questionanswer)
【讨论】:
以上是关于在导航控制器上添加片段而不是替换片段?的主要内容,如果未能解决你的问题,请参考以下文章
BottomNavigation popBackStack() 导航到 startDestination 而不是上一个片段