最佳答案
我试图在我现有的应用程序中实现 Navigation with Jetpack's architecture components。
我有一个单独的活动应用程序,其中的主要片段(ListFragment
)是一个项目列表。目前,当用户点击一个列表项时,第二个片段通过 fragmentTransaction.add(R.id.main, detailFragment)
添加到堆栈中。因此,当背部被按下的 DetailFragment
是分离和 ListFragment
再次显示。
使用导航体系结构,这是自动处理的。没有添加新的片段,而是添加了 被取代了,因此片段视图被销毁,当按回键重新创建视图时,将调用 onDestroyView()
和 onCreateView()
。
我知道这是一个很好的模式,用于 LiveData和 ViewModel,以避免使用过多的内存,但在我的情况下,这是恼人的,因为列表有一个复杂的布局和膨胀的时间和 CPU 消耗,也因为我需要保存列表的滚动位置,并再次滚动到相同的位置用户离开片段。这是可能的,但似乎它应该存在一个更好的方式。
我已经尝试在片段的私有字段中“保存”视图,并在 onCreateView()
上重用它(如果已经存在) ,但它似乎是反模式的。
private View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_list, container, false);
//...
}
return view;
}
有没有其他更优雅的方法来避免重新膨胀布局?