2014-04-08 4 views
2

다른 문제를 디버깅하는 동안 중 하나의 onCreateView 메서드가 두 번 호출되고 있다는 것을 깨달았습니다. 프로그래밍에 익숙하지 않고 액티비티이로드 될 때 android이이 메서드를 호출하는 방법을 완전히 이해하지 못하고 있지만 두 번 호출되는 것 같지 않습니다. 대부분의 코드를 삭제해도 여전히 내 System.out 메시지가 두 번 표시됩니다.onCreateView 메서드가 두 번 호출되는 이유는 무엇입니까?

public class AddCourse extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_course); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new AddCourseFragment()).commit(); 
     } 
    } 

    public static class AddCourseFragment extends Fragment { 

     View rootView; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      rootView = inflater.inflate(R.layout.fragment_add_course, 
       container, false); 
         System.out.println("I see this TWICE!!!!"); 
      return rootView; 
     }  
    } 
} 

이 거의 정확하게 내 주요 활동 구현 비슷하지만 하나를 두 번 onCreateView을 통과하지 않습니다. 생각? 두 번 조각을 추가하는 것처럼

activity_add_course XML이 요청 된 ...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/container" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

    <fragment android:name="com.NsouthProductions.gradetrackerpro.AddCourse$AddCourseFragment" 
     android:id="@+id/AddCourseFrag" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 
+0

당신은 당신의 activity_add_course 레이아웃 파일을 공유 할 수 있습니까? – brwngrldev

+0

@adavis, 레이아웃 파일을 추가했습니다. 레이아웃 파일이 기본적으로 조각 클래스를 호출하기 때문에 이런 일이 발생합니까? 두 번 전화하는 것을 어떻게 중단해야합니까? – NSouth

+0

은 조각을 두 번 추가하는 것처럼 보입니다. xml에 선언하면 프로그래밍 방식으로 추가 할 필요가 없습니다. – brwngrldev

답변

11

보인다. xml에 선언하면 프로그래밍 방식으로 추가 할 필요가 없습니다.

당신은 당신의 활동의onCreate()에서이를 제거 할 수 있습니다

if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new AddCourseFragment()).commit(); 
     } 
+0

감사합니다. 여기서 긴 질문을 한 후에, 마지막으로 savedInstanceState 조건 코드가 조각이 부풀려 지는지 확인하기위한 것입니다. 그러나 메인 레이아웃이 어쨌든 그것을 팽창시키기 때문에이 코드는 필요하지 않습니다. 다른 부작용이 없기를 바랍니다. 감사! – NSouth

관련 문제