【问题标题】:How to create Fragment's elements when app starts without recreating them如何在应用程序启动时创建片段的元素而不重新创建它们
【发布时间】:2018-10-09 14:17:18
【问题描述】:

我在 mainactivity 中使用了四个片段,每个片段都有其与 mainactivity 类的类。

我在 fragment1 类中有元素,当我在 onCreateView 方法中创建它们时,它们每次打开片段时都会创建。

我尝试在片段类的 onStart 方法中创建元素,没有任何变化。我试图在片段类的 onCreate 方法中创建元素,它停止了应用程序。

当我在 MainActivity 的 onCreate 和 onStart 方法中创建元素时,它会停止应用程序。

所以,基本上我只想创建一次元素,并且在应用启动时必须创建它们。

我该如何解决这个问题?感谢帮助。

【问题讨论】:

  • 创建一个单例类并从那里调用所有片段,并在它们为空时启动它们

标签: java android android-fragments oncreate fragment-oncreateview


【解决方案1】:

我建议您在配置更改时使用 onSavedInstanceState() 保持应用程序的状态,因为当您启动应用程序时,onCreate() 会调用一次,直到配置更改:每个片段的生命周期取决于启动它们的活动,因此,您需要在适当的活动和片段中检查 savedInstanceState 的可空性,以便在 saveInstanceState 为 null 且不为 null 时为活动定义 onCreate() 和片段的 onCreateView() 中的逻辑。 通过这样做,如果您的应用应该在一次之后触发 onCreate() 和 onCreateView(),则保存状态的可空性将决定要运行的逻辑

【讨论】:

    【解决方案2】:

    最简单的方法是在创建它们之前添加一个简单的检查它们是否为空:

    private String test;
    
    if (test == null) 
        test = new String();
    

    对于这种方法,您需要确保变量在整个类的范围内:

    class test {
        private String test;
    
        public void update() {
            if(test == null) test = new String();
                textView.setText(test);
        }
    }
    

    否则您可以重写代码以使用静态变量。

    【讨论】:

    • 感谢回复,我尝试了同样的方法,但是当打开其他片段并打开片段1时,它不会创建元素。我必须使非静态,因为它可以动态变化。
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多