我希望在添加片段之前以编程方式动态创建子视图列表。我有一个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);
它正在获取Splash Screen的上下文,而不是片段,但如何在片段创建之前从片段中获取上下文?
有人可以向我推荐一种更好的方法,在将子视图显示之前将其添加到片段中。
非常感谢任何帮助
01-15 12:25:01.598:E / AndroidRuntime(3443):致命异常:主要 01-15 12:25:01.598:E / AndroidRuntime(3443): java.lang.IllegalStateException:指定的子节点已经有了 家长。您必须首先在孩子的父母上调用removeView()。 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.view.ViewGroup.addView(ViewGroup.java:1871)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.view.ViewGroup.addView(ViewGroup.java:1828)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.view.ViewGroup.addView(ViewGroup.java:1808)01-15 12:25:01.598:E / AndroidRuntime(3443):at com.single.DefaultFragment.onCreateView(DefaultFragment.java:61)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870) 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:420) 01-15 12:25:01.598:E / AndroidRuntime(3443):at android.os.Handler.handleCallback(Handler.java:587)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.os.Handler.dispatchMessage(Handler.java:92)01-15 12:25:01.598:E / AndroidRuntime(3443):at android.os.Looper.loop(Looper.java:123)01-15 12:25:01.598: E / AndroidRuntime(3443):at android.app.ActivityThread.main(ActivityThread.java:3683)01-15 12:25:01.598:E / AndroidRuntime(3443):at java.lang.reflect.Method.invokeNative(Native Method)01-15 12:25:01.598:E / AndroidRuntime(3443):at java.lang.reflect.Method.invoke(Method.java:507)01-15 12:25:01.598: E / AndroidRuntime(3443):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 01-15 12:25:01.598:E / AndroidRuntime(3443):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)01-15 12:25:01.598:E / AndroidRuntime(3443):at dalvik.system.NativeStart.main(原生方法)
答案 0 :(得分:0)
想出解决方案,在我的片段中我有一个arraylist,它包含一个对象列表,每当我点击按钮转到下一个片段,或者返回按钮返回时,我调用删除所有相对布局的视图,并且现在它工作正常。