在 android 中向上导航时是否可以传递数据
Is it possible to pass data while navigating up in android
我有两个片段 A 和 B。我试图导航到 B,然后返回到 A。在执行此操作时,我在 A 中有一些我想要的表单数据(一堆文本字段)在来回导航到 B 时保留。当我从 B navigateUp()
时,A 中的数据被保留,但我无法将数据从 B 传递到 A。如果我在导航回 A 时使用包,我无法使用 onSaveInstanceState() 保存数据。我在片段 A 中使用了以下代码来保存表单数据(来自:https://developer.android.com/guide/components/activities/activity-lifecycle#instance-state)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if(savedInstanceState!=null){
with(savedInstanceState) {
inputName.setText(getString("Name"))
}
}
else{
//I just leave it since the text fields will be empty anyways
}
}
override fun onSaveInstanceState(outState: Bundle) {
outState.run {
putString("Name",inputName.text.toString())
}
super.onSaveInstanceState(outState)
}
但是当我离开时没有调用 onSaveInstaceState(由于这个原因,当调用 onCreate 时,该值最终为 null,并且流程转到 if 语句)。我只想在从 A 导航到 B 时将数据保存在 A 中。
这不是最好的方法(我建议使用共享有状态视图模型共享数据,但从你的问题来看,不清楚你是否在使用视图模型):
- 为您的片段 B 提供如下操作:
<action
android:id="@+id/backToA"
app:destination="@+id/A"
app:popUpTo="@+id/B"
app:popUpToInclusive="true" />
- 为您的片段 A 提供您将从 B 传递的所需参数。
- 从 B,而不是
navigateUp
使用 navigate
和操作 backToA
并提供您需要提供给 A 的参数
您还必须注意手动处理 "back by system back button" 场景(以覆盖 navigateUp),如果您有工具栏,可能还有 "back by toolbar back" - 但那是另一回事了。
我有两个片段 A 和 B。我试图导航到 B,然后返回到 A。在执行此操作时,我在 A 中有一些我想要的表单数据(一堆文本字段)在来回导航到 B 时保留。当我从 B navigateUp()
时,A 中的数据被保留,但我无法将数据从 B 传递到 A。如果我在导航回 A 时使用包,我无法使用 onSaveInstanceState() 保存数据。我在片段 A 中使用了以下代码来保存表单数据(来自:https://developer.android.com/guide/components/activities/activity-lifecycle#instance-state)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if(savedInstanceState!=null){
with(savedInstanceState) {
inputName.setText(getString("Name"))
}
}
else{
//I just leave it since the text fields will be empty anyways
}
}
override fun onSaveInstanceState(outState: Bundle) {
outState.run {
putString("Name",inputName.text.toString())
}
super.onSaveInstanceState(outState)
}
但是当我离开时没有调用 onSaveInstaceState(由于这个原因,当调用 onCreate 时,该值最终为 null,并且流程转到 if 语句)。我只想在从 A 导航到 B 时将数据保存在 A 中。
这不是最好的方法(我建议使用共享有状态视图模型共享数据,但从你的问题来看,不清楚你是否在使用视图模型):
- 为您的片段 B 提供如下操作:
<action
android:id="@+id/backToA"
app:destination="@+id/A"
app:popUpTo="@+id/B"
app:popUpToInclusive="true" />
- 为您的片段 A 提供您将从 B 传递的所需参数。
- 从 B,而不是
navigateUp
使用navigate
和操作backToA
并提供您需要提供给 A 的参数
您还必须注意手动处理 "back by system back button" 场景(以覆盖 navigateUp),如果您有工具栏,可能还有 "back by toolbar back" - 但那是另一回事了。