を持つ にプログラムで を追加しようとしFragment
てScrollView
いLinearLayout
ます。何らかの理由で、次の関数を呼び出すと、 に要素が追加されないように見えますLinearLayout
。
コードは次のとおりです。ユーザーがボタンをクリックすると、フラグメントを 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;
}
}
この関数は、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() が呼び出されると、コンテナーの null 値を受け取ることがわかりました。ここに示す例の後にコードをモデル化しました:プログラムで作成されたコンテンツ ビューを使用してアクティビティにフラグメントを追加する方法とここ: http://developer.android.com/training/basics/fragments/fragment-ui.html
編集:また、この同じコードを使用しても、フラグメントの代わりにテキストビューを追加しようとすると、問題なく動作します。