android-fragments - 在android中向上导航时是否可以传递数据
问题描述
我有两个片段 A 和 B。我正在尝试导航到 B,然后返回 A。在执行此操作时,我在 A 中有一些表单数据(一堆文本字段),我想在导航返回时保留这些数据再到 B。当我navigateUp()
从 B 时,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,而不是与您需要提供给 A 的操作和供应参数一起
navigateUp
使用navigate
backToA
您还必须注意手动处理“通过系统返回按钮返回”场景(以覆盖 navigateUp),以及如果您有工具栏,可能还需要“通过工具栏返回” - 但这是另一回事。
推荐阅读
- c# - SslStream AuthenticateAsClient 在 Ubuntu 中失败
- virtualbox - 无法在 Windows 10 上使用 Virtualbox 安装 minishift
- kotlin - DTO/POJO 是否上升到 OSGi/DS 中可配置服务的资格?
- python - 在熊猫数据框中每天运行每个类别的总数
- javascript - Safari 中 onafterprint 事件监听器的 Polyfill
- python - 如何使用 get_dummies 从现有列创建新列
- fluentd - 如何解决 fluentd(td-agent) 缓冲区问题?
- python-3.x - SymPy 绘图分辨率
- python - 为所有缺失的日期数据框复制前一天的行
- javascript - 如何在特定时间重定向页面