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

时间:2017-11-23 08:18:32

标签: android android-layout android-constraintlayout

在我的活动开始时,我写道:

private static ConstraintLayout cl;

然后在onCreate上,我写道:

cl = new ConstraintLayout(myActivity.this);

我这样做的原因是我想使用

cl.addView(myView); 

在我的活动中的任何地方。

但是,存在一个很大的问题,如果我将程序保留为上述设置,则根本不会添加任何视图,也不会发生崩溃。

如果我想添加我的观点,我需要这样做:

cl = (ConstraintLayout) findViewById(R.id.my_design);

那么,就这样做,什么是最重要的?

问题在于:

  1. 我只能在"分支步骤"中使用它。我的活动,我不能在任何主要地方使用它,对不起,我不知道如何把它变得更好。例如,我可以将它放在我的活动的switch-case代码部分中,但绝对不会像onCreate()这样的主要部分,或者奇怪的是这一行代码将会" nullify"执行后,cl,即足够奇怪:

    cl =(ConstraintLayout)findViewById(R.id.my_design);

  2. cl会从某些东西转到" null"在调试窗口中。当我将这一行放在" onCreate()"

    时会发生这种情况

    但问题并没有结束:

    1. 我只能使用那行ONCE但我必须使用该行。
    2. 换句话说,我必须使用:     cl =(ConstraintLayout)findViewById(R.id.my_design);

      但我不能在另一个"分支"地方(我再次因为不知道正确的术语而道歉),如果我这样做,就会有一个

        

      " java.lang.IllegalStateException:指定的子节点已经有父节点。您必须先在孩子的父母身上调用removeView()。"

      错误。如果我第二次不打电话,那么cl总是" null"当我使用它。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

对于ConstraintLayout布局(位置和大小),必须对其进行约束。 (查看ConstraintLayout上的教程。

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

同样将布局(ViewGroup的子类)存储在静态变量中是一个坏主意,因为它会泄漏。为了更好地理解这个关于" Android Activity生命周期"的阅读。