Android 实例化ConstraintLayout对象的正确方法是什么?

Android 实例化ConstraintLayout对象的正确方法是什么?,android,android-layout,android-constraintlayout,Android,Android Layout,Android Constraintlayout,在活动开始时,我写道: private static ConstraintLayout cl; cl = new ConstraintLayout(myActivity.this); 然后在onCreate中,我写道: private static ConstraintLayout cl; cl = new ConstraintLayout(myActivity.this); 我这样做的原因是我想使用 cl.addView(myView); 只要我能在我的活动中 但是,有一个巨大的问

在活动开始时,我写道:

private static ConstraintLayout cl;
cl = new ConstraintLayout(myActivity.this);
然后在onCreate中,我写道:

private static ConstraintLayout cl;
cl = new ConstraintLayout(myActivity.this);
我这样做的原因是我想使用

cl.addView(myView); 
只要我能在我的活动中

但是,有一个巨大的问题,如果我离开程序作为上述设置,将不会添加任何视图,但也不会崩溃

如果要添加视图,我需要执行以下操作:

cl = (ConstraintLayout) findViewById(R.id.my_design);
那么,就这么做吧,有什么大不了的

问题在于:

  • 我只能在我活动的“分支步骤”中使用它,我不能在任何地方使用它,很抱歉,我不知道如何更好地使用它。例如,我可以将其放在我的活动的一个switch case代码部分中,但决不能放在像onCreate()这样的主要代码中,或者奇怪的是,这行代码在执行以下操作后会使cl“无效”,也就是说,很奇怪:

    cl=(ConstraintLayout)findViewById(R.id.my_设计)

  • cl将在调试窗口中从某物变为“null”。当我将这一行放在“onCreate()中时,就会发生这种情况

    但问题还没有结束:

  • 我只能用那条线一次,但我必须用那条线
  • 换句话说,我必须使用: cl=(ConstraintLayout)findViewById(R.id.my_设计)

    但我不能在另一个“分支”地方使用它(我再次为不知道正确的术语而道歉),如果我这样做,将会有一个

    “java.lang.IllegalStateException:指定的子项已具有父项。必须首先对子项的父项调用removeView()。”

    错误。如果我第二次不调用它,当我使用它时,cl总是“null”


    我很沮丧!我应该如何正确地实例化此cl对象,以便在任何地方方便地使用它?

    您有几个问题。我建议阅读/观看关于构建android应用程序的教程

    它的核心是一个视图。 视图必须显示在屏幕上才能看到它们。 setContentView(cl)将其显示在屏幕上。 findViewById允许您在屏幕上查找对象

    ConstraintLayout也是一个视图组,这意味着它可以包含和布局其他视图

    要将约束调整为布局(位置和大小),必须对其进行约束。 (请看有关ConstraintLayout的教程

    如果你想要一个简单的暴力按钮(cl.addView(myView)) 使用具有固定布局LinearLayout()的布局

    在静态变量中存储布局(ViewGroup的子类)也是一个坏主意,因为它会泄漏。要更好地理解这一点,请阅读“Android活动生命周期”