无法将片段添加到活动中

时间:2012-08-03 02:03:52

标签: android android-layout android-fragments

我正在尝试以编程方式将Fragment添加到ScrollView的{​​{1}}。出于某种原因,当我调用以下函数时,它似乎没有向LinearLayout添加任何元素。

这是代码: 当用户单击按钮时,将调用以下代码,该代码应将片段添加到LinearLayout

LinearLayout

此函数为arraylist中的每个类调用以下函数:

public void refresh(View v) {
    CourseManagement cm = CourseManagement.getInstance();
    ArrayList<Course> courses = cm.getCourses();
    if(courses.size()>0) {
        Iterator<Course> it = courses.iterator();
        while(it.hasNext()) {
            Course c = it.next();
            addCourse(c);
        }
    } else {
        //No Classes In List;
    }
}

片段本身就在这里:

private void addCourse(Course c) {
    LinearLayout destination = (LinearLayout) findViewById(R.id.addListCourses);
    FrameLayout fl = new FrameLayout(this);
    CreateFragTests frag = new CreateFragTests();
    fl.setId(frag.getId());
    fl.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(fl.getId(), frag).commit();
    destination.addView(fl);
    //frag.setCourse(c);
}

经过一些调试后,我发现当调用onCreateView()时,它会为容器接收一个空值。我在此处给出的示例之后对我的代码进行了建模:How do I add a Fragment to an Activity with a programmatically created content view和此处:http://developer.android.com/training/basics/fragments/fragment-ui.html

编辑:如果我使用相同的代码,但尝试添加textview而不是片段,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

问题在于fl.setId(frag.getId());。您应该将唯一ID传递给它,而不是将frag.getId()作为其id传递。

您可以使用两种方法,在XML或类中定义id 例如

private static final int CONTAINER_ID = 123456;

并使用它来设置FrameLayout id。

fl.setId(CONTAINER_ID);

或更简单的方法如下

private void addCourse(Course c) {
    CreateFragTests frag = new CreateFragTests();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(R.id.addListCourses, frag).commit();
    //frag.setCourse(c);
}