【发布时间】:2015-10-14 03:55:56
【问题描述】:
我有一个在 onCreate 中动态创建其布局的活动。它看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
laying out screen at runtime (activity_main.xml is not used).
*/
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
100);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
// instantiate my class that does drawing on Canvas
bubble = new Bubble(this);
bubble .setLayoutParams(lp);
bubble .setBackgroundColor(MY_COLOR);
ll.addView(bubble);
setContentView(ll);
}
所以,根本没有布局,它应该是这样的。
我想添加片段而不是上面的代码,然后作为片段 onCreate() 的一部分,实例化我的 Bubble 类来进行绘图。片段也不应该在布局 XML 文件中定义任何布局,但应该都在运行时。
非常感谢,
【问题讨论】:
-
到底是什么问题?您只需将您的
View实例化移动到Fragment的onCreateView()方法,并调用return ll;而不是setContentView(ll);。你甚至不需要LinearLayout,如果Bubble是唯一的ViewFragment将拥有。 -
不,你很好 -
AppCompatActivity extends FragmentActivity. -
您的 Activity 需要在其布局中包含一个 ViewGroup - 通常是 FrameLayout - 它将容纳 Fragment。然后,您将使用
FragmentTransaction#add()方法之一,该方法将int作为第一个参数,这将是活动中ViewGroup 的ID;例如,R.id.container. -
不是没有看到您的代码和堆栈跟踪,但这必须是一个新问题。不过,请先尝试在网站上搜索该错误。我知道我以前见过与该错误有关的问题。
-
@MikeM。非常感谢。我会将您的回复标记为答案,但由于某种原因我不能,它只允许我对您的 cmets 投赞成票/反对票。