重现的步骤
在GitHub上使用样本MvvmCross-Samples / XPlatformMenus /
将应用部署到Android设备,最多将
设置为限制后台进程设置为1运行应用程序,从菜单中选择View Pager示例
将应用程序发送到后台,加载其他应用程序,然后再次返回该应用程序以确保其已被落后
预期行为
我希望View Pager片段会重新出现在背景之前选中的标签上
实际行为
由于RecyclerViewFragment.OnCreateView中的以下代码,返回了空引用错误:
_itemSelectedToken = ViewModel.WeakSubscribe(() => ViewModel.SelectedItem,
(sender, args) =>
{
if (ViewModel.SelectedItem != null)
Toast.MakeText(Activity,
string.Format("Selected: {0}", ViewModel.SelectedItem.Title),
ToastLength.Short).Show();
});
问题是ViewModel尚未恢复且为空。
我遇到此问题的原因是我在自己的应用程序中使用MvxCachingFragmentStatePagerAdapter,而不是使用ViewModel类型初始化FragmentInfo:
new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 1", typeof(RecyclerViewFragment), typeof(RecyclerViewModel))
我为每个FragmentInfo使用相同的模型:
new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 1", typeof(RecyclerViewFragment), ViewModel)
这会导致相同的行为 - 应用程序从后台恢复时的null ViewModel
我正在使用MvvmCross 4.4和Android 7.0