我希望在添加片段之前以编程方式使用子视图动态创建片段列表。我有一个 JSON 文件,它为每个片段设置一个视图列表,所以当我的应用程序启动时,有一个名为启动屏幕的活动,它只在处理数据时显示图像。下面我尝试生成 3 个片段并设置它们的子视图的快速示例(这是在启动屏幕活动中)
for(int i = 0; i < 3; i++)
{
DefaultFragment frag = new DefaultFragment();
RelativeLayout layout = (RelativeLayout) createUI(frag);
frag.setFragLayout(layout);
}
private RelativeLayout createUI(final DefaultFragment frag_p)
{
RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
Button but = new Button(this);
but.setWidth(100);
but.setHeight(100);
but.setText("Next");
but.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0)
{
frag_p.testNextFragment();
}
});
layoutParams.setMargins(100, 100, 0, 0);
layout.addView((View) but, layoutParams);
return layout;
}
然后在片段中有一个名为fraglayout的RelativeLayout
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//took out layout inflator temp, to try using the relativeLayout which was set from the splash screen
// View V = inflater.inflate(R.layout.fraglayout, container, false);
return fragLayout;
}
这允许我将子视图添加到片段中,好吧,这个测试只涉及一个按钮,当按下该按钮时,它会将您带到下一个工作正常的片段,但是当我尝试转到上一个片段时,我收到错误“指定的孩子已经有了父母”。
我知道这是因为这个
Button but = new Button(this);
它正在获取启动画面的上下文而不是片段,但是如何在片段创建之前从片段中获取上下文?
任何人都可以向我建议一种更好的方法,在显示之前将子视图添加到片段中。
任何帮助将非常感激
01-15 12:25:01.598: E/AndroidRuntime(3443): 致命异常: main 01-15 12:25:01.598: E/AndroidRuntime(3443): java.lang.IllegalStateException: 指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。01-15 12:25:01.598: E/AndroidRuntime(3443): 在 android.view.ViewGroup.addViewInner(ViewGroup.java:1976) 01-15 12:25:01.598: E/AndroidRuntime(3443): 在 android. view.ViewGroup.addView(ViewGroup.java:1871) 01-15 12:25:01.598: E/AndroidRuntime(3443): 在 android.view.ViewGroup.addView(ViewGroup.java:1828) 01-15 12:25: 01.598: E/AndroidRuntime(3443): 在 android.view.ViewGroup.addView(ViewGroup.java:1808) 01-15 12:25:01.598: E/AndroidRuntime(3443): 在 com.single.DefaultFragment.onCreateView(DefaultFragment .java:61) 01-15 12:25:01.598: E/AndroidRuntime(3443):