Android 恢复后是否停止重新创建片段?

Android 恢复后是否停止重新创建片段?,android,android-fragments,onresume,back-stack,Android,Android Fragments,Onresume,Back Stack,我正在使用几个片段动态添加到活动。一切正常,当我按下后退按钮时,片段s转到后退。当我恢复时,它就会出现。但是每次在Resume上,它都会重新创建片段,并调用onCreateView。我知道这是片段生命周期的正常行为 这是我的onCreateView: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Vi

我正在使用几个
片段
动态添加到
活动
。一切正常,当我按下后退按钮时,
片段
s转到
后退
。当我恢复时,它就会出现。但是每次在
Resume
上,它都会重新创建
片段
,并调用
onCreateView
。我知道这是
片段
生命周期的正常行为

这是我的
onCreateView

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

我想阻止那些
片段的重新创建。我尝试了在SavedinState上使用
,但没有任何效果。我如何才能做到这一点呢?

不幸的是,您无法阻止片段被重新创建。您所能做的最好的事情是在事务恢复之后但在显示之前删除事务中的片段

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


不幸的是,棘手的部分是找到提交此事务的最佳位置。据报道,安全的地方不多。也许您可以在
FragmentActivity.onResumeFragments()
内部尝试,或者在调用超级方法之前,在活动的
onCreateView
中将
savedInstanceState
设置为null。您还可以从savedInstanceState包中仅删除键“android:viewHierarchyState”和“android:fragments”。下面是简单解决方案的代码,将状态置零:

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

    ...
}

我使用了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;
    }
}

我将view变量放在类中,并且仅当view实例为null时才将其膨胀为新的,或者使用之前创建的实例

谢谢您的回复!一些代码示例可能会有所帮助!:)如何在Kotlinsurry nanba解决此问题。我不认识科特林。你最好以一个新问题的形式提问,这样你就能在stackoverflow中得到答案。