【问题标题】:save state fragment when that's replaced替换时保存状态片段
【发布时间】:2021-04-21 19:33:19
【问题描述】:

我使用片段。 当替换一个片段并且它支持 onCreateView 方法被调用和 从服务器检索数据。 如果使用 if(view==null) 来避免这种情况,那没关系。 对吗?

public class BlankFragment extends Fragment {
    View view;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if(view==null){

            view= inflater.inflate(R.layout.frag,container,false);
            //my code

                }

        return view;
    }

}

【问题讨论】:

    标签: java android replace fragment


    【解决方案1】:

    每次调用onCreateView表示还没有任何视图,因此是剩余检查。

    根据您的评论,我怀疑您想在静态上下文中保存视图引用,这是您不应该做的事情。相反,要真正“保存片段状态”,您应该使用提供的 Bundle savedInstanceState 实例来保存需要“缓存”的任何内容。

    您应该简单地将数据保存在 onInstanceSaved 钩子中 - 它提供 Bundle 作为参数,并从 onCreateView 钩子中提供的包中恢复状态。

    这两个回调中存在这些捆绑包的唯一原因是 - 如果需要,可以保存/恢复其状态。

    面向开发人员的 Android 文档在此处https://developer.android.com/guide/fragments/saving-state#savedstate

    详细描述了该机制

    【讨论】:

    • 不,不是多余的支票。我想在替换并备份到该片段时保存状态片段
    • 它是 - 这就是片段生命周期的工作方式。如果它从未被销毁 - onCreateView 将不会被调用。如果您以某种方式保存对视图的引用(例如在静态字段中),那么您做错了。 developer.android.com/guide/fragments/lifecycle。您可以将 onCreateView 视为上下文类构造函数,因为它在片段的生命周期内仅被调用一次,并且它具有作为参数传递的应用程序上下文
    • 那么片段视图替换时如何保存?
    • 我已经通过回答扩展了。长话短说 - 使用提供的 Bundles 实例。
    • 我也可以保存一个列表吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多