Android Can';不要将片段添加到活动中

Android Can';不要将片段添加到活动中,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我试图以编程方式将片段添加到具有线性布局的滚动视图中。出于某种原因,当我调用以下函数时,它似乎没有向线性布局添加任何元素 代码如下: 当用户单击一个按钮时,将调用下面的代码,以将片段添加到LinearLayout public void refresh(View v) { CourseManagement cm = CourseManagement.getInstance(); ArrayList<Course> courses = cm.getCourses();

我试图以编程方式将
片段添加到具有
线性布局的
滚动视图中。出于某种原因,当我调用以下函数时,它似乎没有向
线性布局添加任何元素

代码如下: 当用户单击一个按钮时,将调用下面的代码,以将片段添加到LinearLayout

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;
    }
}
片段本身在这里:

public class CreateFragTests extends Fragment {

private static int uniqID = 0;
private static String uniqPrefix = "courseList";
private Course course;

public CreateFragTests() {
    super();
    uniqID++;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //After some debugging, I have found that container is passed as null to this
    //this function which may be part of the problem?
    return inflater.inflate(R.layout.activity_create_frag_tests, container, true);
}

public void setCourse(Course c) {
    this.course = c;
    setCourseName(course.name);
    setInstructorsName(course.instructorLastName+", "+course.instructorFirstName);
}

public String getUniqID() {
    return uniqPrefix+"_"+uniqID;
}
}
经过一些调试,我发现当调用onCreateView()时,它接收容器的空值。我已经根据这里给出的示例对代码进行了建模:


编辑:如果我使用相同的代码,但尝试添加一个文本视图而不是片段,那么效果很好。

问题就出在这里
fl.setId(frag.getId())。与其将frag.getId()作为其id传递,不如将唯一的id传递给它

有两种方法可以做到,要么在XML中定义id,要么在类中定义id 比如说

private static final int CONTAINER_ID=123456

并使用它设置FrameLayout id

fl.setId(容器标识)

或者更简单的方法如下

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