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

Kai*_*dul 11 android onresume android-fragments back-stack

我正在使用几个fragments来动态添加activity.一切正常,当我按下后退按钮时,fragments会去backstack.当resume它出现时,它会出现.但每次都在Resume,它正在重新创造fragment和呼唤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;
}
Run Code Online (Sandbox Code Playgroud)

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

Arn*_*son 10

在Activity onCreateViewsavedInstanceState,在调用super方法之前将其设置为null.您还可以从savedInstanceState包中仅删除"android:viewHierarchyState"和"android:fragments"键.这是简单解决方案的代码,使状态为零:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)


Say*_*yka 6

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我将视图变量放入类中,并仅在视图实例为null或使用之前创建的实例时才将其充气为新变量


Ale*_*MDC 5

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

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

不幸的是,棘手的部分是找到提交此事务的最佳位置。根据这篇文章,没有多少安全的地方。也许您可以尝试内部FragmentActivity.onResumeFragments()或可能Fragment.onResume()