不能将片段添加到活动
问题描述:
我试图以编程方式将Fragment
添加到ScrollView
,它具有LinearLayout
。出于某种原因,当我调用以下函数时,它似乎没有向LinearLayout
添加任何元素。不能将片段添加到活动
下面是代码: 当用户点击一个按钮,下面的代码被称为是应该的片段添加到的LinearLayout
这个函数调用下面的函数,每类ArrayList中:
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);
}
片段本身是在这里:
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()被调用时,它会收到容器的空值。我有我的模拟代码在这里给出的例子后: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,而不是只是正常工作的一个片段。
答
问题出在这里fl.setId(frag.getId());
。而不是传递frag.getId()作为它的id,你应该传入一个唯一的id。
有2种方法,你可以做,无论是在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);
}