停止片段从简历中重新创build?

我正在使用几个fragment来dynamic添加到activity 。 一切工作正常,当我按下后退button, fragment s到backstack 。 当我resume它,似乎。 但每次在Resume ,它都是重新创buildfragment并调用onCreateView 。 我知道这是fragment生命周期的正常行为。

这是我的onCreateView

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.competitive_programming_exercise, container, false); return rootView; } 

我想阻止这些fragment重新创build。 我尝试了onSavedInstanstate但没有任何工作。 我怎么能做到这一点?

Solutions Collecting From Web of "停止片段从简历中重新创build?"

不幸的是,你无法停止片段的重新创build。 您可以做的最好的办法是在事务恢复之后但在显示之前删除事务中的碎片。

如果您知道要立即删除片段,则可以通过简化诸如onCreateView()来返回一个虚拟视图,而不是再次使整个视图层次结构膨胀,从而降低恢复片段的性能。

不幸的是,棘手的部分是find最好的地方来承担这笔交易。 根据这篇文章 ,没有太多安全的地方。 也许你可以试试FragmentActivity.onResumeFragments()或者可能是Fragment.onResume()

在Activity的onCreateView ,在调用super方法之前将savedInstanceState设置为null。 你也可以从savedInstanceState包中只删除键“android:viewHierarchyState”和“android:fragments”。 这里是简单解决scheme的代码,使状态为null:

 @Override public void onCreate(Bundle savedInstanceState) { savedInstanceState = null; super.onCreate(savedInstanceState); ... } 

Iam使用5个片段,为我工作的好,因为我面临同样的问题之前..

 public class MyFragmentView1 extends Fragment { View v; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (v == null) v = inflater.inflate(R.layout.my_fragment_view_layout, container, false ); return v; } } 

我把视图variables放在类中,只有在视图实例为空或者使用之前创build的视图实例时,才将其视为新的