Activity/ViewModel 在显示新的 Activity 时重新创建
Activity/ViewModel recreated when new Activity is shown
我有 Activity A,它显示从 Web 服务异步加载的项目列表。此列表存储在 ViewModel 中。当您 select 其中一项 Activity B 将打开 selected 项目的详细信息。 Activity B 是 Activity A 的 child Activity。按下后退按钮将返回到 Activity A...但是,此时 Activity A 被销毁并创建一个新的 ViewModel,它再次调用 Web 服务。
这与我在 Activity B 处于前景时旋转设备时看到的其他问题不同。 Activity A 的 onDestroy 方法在项目被 selected 和显示 Activity B 时不被调用...但是当后退按钮被按下时它被调用。
我不希望每次用户返回时 ViewModel 都刷新数据 Activity A...知道是什么原因造成的吗?
相关清单信息:
<activity android:name=".ActivityA" />
<activity
android:name=".ActivityB"
android:label="@string/title_b"
android:parentActivityName=".ActivityA" />
Activity答:
class ActivityA : AppCompatActivity() {
private lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.a_activity)
mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
...
不确定还有哪些其他代码可以帮助诊断问题....
您需要删除清单中的 android:parentActivityName=".ActivityA"
。如official documentation所述:
The system reads this attribute to determine which activity should be
started when the user presses the Up button in the action bar.
因此,当您 return 到之前的 activity 时,新的 ViewModel
被创建。
我有 Activity A,它显示从 Web 服务异步加载的项目列表。此列表存储在 ViewModel 中。当您 select 其中一项 Activity B 将打开 selected 项目的详细信息。 Activity B 是 Activity A 的 child Activity。按下后退按钮将返回到 Activity A...但是,此时 Activity A 被销毁并创建一个新的 ViewModel,它再次调用 Web 服务。
这与我在 Activity B 处于前景时旋转设备时看到的其他问题不同。 Activity A 的 onDestroy 方法在项目被 selected 和显示 Activity B 时不被调用...但是当后退按钮被按下时它被调用。
我不希望每次用户返回时 ViewModel 都刷新数据 Activity A...知道是什么原因造成的吗?
相关清单信息:
<activity android:name=".ActivityA" />
<activity
android:name=".ActivityB"
android:label="@string/title_b"
android:parentActivityName=".ActivityA" />
Activity答:
class ActivityA : AppCompatActivity() {
private lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.a_activity)
mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
...
不确定还有哪些其他代码可以帮助诊断问题....
您需要删除清单中的 android:parentActivityName=".ActivityA"
。如official documentation所述:
The system reads this attribute to determine which activity should be started when the user presses the Up button in the action bar.
因此,当您 return 到之前的 activity 时,新的 ViewModel
被创建。