2012-04-12 5 views
10

다음은 Android 1.6에서 실행되므로 조각 용 호환 패키지를 사용하고 있습니다. 다음 TestFragment에서 정적 중첩 클래스입니다 :Fragment.onCreateView에 null 컨테이너가 있습니다.

public class FragmentTestActivity extends FragmentActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

public static class TestFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     TextView result = new TextView(getActivity()); 
     result.setText("Hello TestFragment"); 
     return result; 
    } 
} 

}

main.xml에 파일 :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent"> 
<fragment class="com.test.FragmentTestActivity$TestFragment" 
     android:id="@+id/test" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" /> 
</FrameLayout> 

이상한 일이 onCreateView에서 컨테이너 매개 변수가 null 것입니다.

이제 프래그먼트를 프로그래밍 방식으로 추가하면 (그냥 액티비티의 onCreate 메서드 변경) 컨테이너가 더 이상 null이 아닙니다. 왜?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Fragment frag = new TestFragment(); 
    getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit(); 
} 
+1

나는 똑같은 문제가있다. 컨테이너가 조각이 포함 된 활동 레이아웃의 일부라고 생각했습니다. 어떻게 그게 null이 될 수 있습니까? –

답변

0

문서는 언급이 null이 될 수있다 :

공공보기 onCreateView (LayoutInflater에서 인플레이터, 뷰 그룹 용기, 번들 savedInstanceState)

[...]

컨테이너 : null이 아닌 경우,이 부분은 조각의 UI를 첨부해야하는 상위보기입니다. 조각에 보기 자체를 추가해서는 안되며이지만 보기의 LayoutParams를 생성하는 데 사용할 수 있습니다.

분명히 : container.addView(...)과 같은 어떤 것도해서는 안됩니다.

+4

그는 그가하고있는 것이 아닙니다. 그는 레이아웃 xml에서 팽창 할 때 조각이 들어있는 부모보기가 있더라도 컨테이너가 null이라는 것을 말합니다. 그럴 생각입니다. – DeeV

+0

죄송합니다. 분명치 않았습니다. 나는 그가 현재'container.addView (...) '를하고 있지 않다는 것을 알고 있지만 그가 원했던 것 같아서 컨테이너가 때때로 null이라는 것을 알아 차렸다. 문서가 "null이 아닌 경우"는 "null"인 것으로 완벽하게 괜찮 았음을 의미하며 아무런 뷰도 추가 할 필요가 없으므로 null인지 여부는 중요하지 않습니다. – Timmmm

+0

예를 들어, 어떤 경우에는 프래그먼트를 업데이트 할 BroadcastReceiver를 갖고 싶습니다. 컨테이너를 저장하면 나중에 업데이트 할 수 있었지만 좋은 방법이었을 것입니다. 그러나 null 컨테이너를 사용하면 다른 방법으로 찾아야합니다. – Shushu

관련 문제