在我的活动开始时,我写道:
private static ConstraintLayout cl;
然后在onCreate上,我写道:
cl = new ConstraintLayout(myActivity.this);
我这样做的原因是我想使用
cl.addView(myView);
在我的活动中的任何地方。
但是,存在一个很大的问题,如果我将程序保留为上述设置,则根本不会添加任何视图,也不会发生崩溃。
如果我想添加我的观点,我需要这样做:
cl = (ConstraintLayout) findViewById(R.id.my_design);
那么,就这样做,什么是最重要的?
问题在于:
我只能在"分支步骤"中使用它。我的活动,我不能在任何主要地方使用它,对不起,我不知道如何把它变得更好。例如,我可以将它放在我的活动的switch-case代码部分中,但绝对不会像onCreate()这样的主要部分,或者奇怪的是这一行代码将会" nullify"执行后,cl,即足够奇怪:
cl =(ConstraintLayout)findViewById(R.id.my_design);
cl会从某些东西转到" null"在调试窗口中。当我将这一行放在" onCreate()"
时会发生这种情况但问题并没有结束:
换句话说,我必须使用: cl =(ConstraintLayout)findViewById(R.id.my_design);
但我不能在另一个"分支"地方(我再次因为不知道正确的术语而道歉),如果我这样做,就会有一个
" java.lang.IllegalStateException:指定的子节点已经有父节点。您必须先在孩子的父母身上调用removeView()。"
错误。如果我第二次不打电话,那么cl总是" null"当我使用它。
我很沮丧!我应该如何正确地实例化这个cl对象,以便我可以方便地在任何地方使用它?
答案 0 :(得分:0)
你有几个问题。我建议阅读/观看有关构建Android应用程序的教程。
其核心ConstraintLayout是一个视图。 视图必须在屏幕上才能看到它们。 setContentView(cl)将它放在屏幕上。 findViewById允许您在屏幕上查找对象
ConstraintLayout也是一个ViewGroup,这意味着它可以包含和布局其他视图。
对于ConstraintLayout布局(位置和大小),必须对其进行约束。 (查看ConstraintLayout上的教程。
如果你想要一个简单的暴力按钮(cl.addView(myView)) 使用具有固定布局LinearLayout()的布局。
同样将布局(ViewGroup的子类)存储在静态变量中是一个坏主意,因为它会泄漏。为了更好地理解这个关于" Android Activity生命周期"的阅读。