1

我希望在添加片段之前以编程方式使用子视图动态创建片段列表。我有一个 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):

4

1 回答 1

0

Figured out solution, in my fragment I have an arraylist which holds a list of objects, whenever I click the button to go to next fragment, or back button to go back, I call remove all views on my relative layout, and now it works fine.

于 2013-01-16T16:32:31.127 回答