0

を持つ にプログラムで を追加しようとしFragmentScrollViewLinearLayoutます。何らかの理由で、次の関数を呼び出すと、 に要素が追加されないように見えます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

編集:また、この同じコードを使用しても、フラグメントの代わりにテキストビューを追加しようとすると、問題なく動作します。

4

1 に答える 1

1

問題はここにありますfl.setId(frag.getId());。frag.getId() を ID として渡す代わりに、一意の ID を渡す必要があります。

XML で ID を定義する方法と、クラスで ID を定義する方法の 2 つがあります。

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);
}
于 2012-08-03T07:25:09.560 に答える