Fragment 刷新返回 - Android 导航

The*_*Bat 8 android android-fragments android-jetpack android-architecture-navigation android-jetpack-navigation

我正在使用 Android 导航组件制作应用程序。但是我遇到了一个非常基本的问题,它可能会导致我的应用程序的整个开发出现问题。

情景

我有这个片段,onViewCreated我在其中观察我的视图模型中的一个字段。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    viewModel = ViewModelProviders.of(this).get(EventDetailsViewModel::class.java)
    viewModel.init(context!!,eventId)

    viewModel.onEventDetailsUpdated().observe(this, Observer {
        setEventDetails(it)
    })

}
Run Code Online (Sandbox Code Playgroud)

在该setEventDetails方法中,我使用数据设置了 recyclerviews。

问题

这个片段是一个带有卷轴的长片段。假设我向下滚动到一个部分,然后单击一个按钮,将我带到另一个片段。

但是当我回到这个片段时,它再次将我带到顶部并完成它在第一次加载时所做的一切。这可能令人不安。它有点像重新创建整个片段而不是保持其旧状态。

我试过的

我搜索了很多问题。并经历了This Github QueryThis SO questionAnother Git ......但我无法解决我的问题。

请帮助,提前致谢。

小智 -1

尝试将此代码放在您首先调用片段的位置。

ft = fm.beginTransaction();
 ft.replace(R.id.main_fragment, yourSearchFragment, "searchFragment");
 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 ft.commit();
Run Code Online (Sandbox Code Playgroud)

当回到片段时

ft = fm.beginTransaction();
 ft.hide(getFragmentManager().findFragmentByTag("searchFragment"));
 ft.add(R.id.main_fragment, yourDetailfragment);
 ft.addToBackStack(null);
 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 ft.commit();
Run Code Online (Sandbox Code Playgroud)