2011-08-21 3 views
4

개발자 가이드에서는 Fragment을 런타임에 프로그래밍 방식으로 기존 ViewGroup에 추가 할 수 있다고합니다. 내 질문은 :이 응용 프로그램에 연결된 ViewGroup은 무엇입니까?ViewGroup에 조각 추가

지금까지 응용 프로그램의 레이아웃을 설명하는 xml 파일에 ViewGroup을 선언하려고했습니다. 그러나 을 public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag) 함수를 사용하여 추가하려고하면 내 응용 프로그램이 충돌합니다 (즉, immediatly가 아니라 내 응용 프로그램의 onCreate 함수 끝).

실제로하고 싶은 것은 내 응용 프로그램에서 여러보기 (Fragment으로 구현 됨)를 관리하고 사용자의 선택에 따라 전환하는 것입니다. 내 접근 방식에 무엇을 추가 (또는 변경)해야합니까?

저를 도우려는 데 시간을 할애 해 주셔서 미리 감사드립니다.

+0

Eclipse에서'adb logcat', DDMS 또는 DDMS 퍼스펙티브를 사용하여 LogCat을 검사하고 크래시와 관련된 스택 추적을 살펴보십시오. – CommonsWare

답변

5

뷰 그룹은 당신이 필요 단편이 프레임을 대체하기위한 간단한 프레임 레이아웃

<FrameLayout 
android:id="@+id/fragmentForChange" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 

에게 그런 일 수있다 NEX :

Bundle args = new Bundle();   
// add needed args 

//create fragment and set arguments  
Fragment fragment= MyFragment(); 
fragment.setArguments(args) 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
// getSupportFragmentManager - uses for compatible library instead of getFragmentManager 

//replace frame with our fragment 
ft.replace(R.id.fragmentForChange,fragment); 
//set type of animation 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 

//finish transaction 
ft.commit(); 

당신은 숨기거나 거래에서 쇼 조각 명령을 할 수 있습니다

ft.hide(fragment);   
ft.show(fragment);   
+0

추가가 대체되지 않습니다. –

1

세부 정보를 제공하지 않아 충돌의 원인을 알 수 없습니다. s, 그냥 팁을 보냈습니다. (나를 위해 효과적이었고, Fragment API가 사용하기에 너무 직관적이지는 않습니다.)

FragmentTransaction에서 생성 된 Fragment는 즉시 추가되지 않고 (나중에 UI 스레드가 사용 중이 지 않을 때) 나중의 재량에 따라 Fragment의 getView() 호출이 잠시 동안 null을 반환 할 수 있습니다 이것은 충돌의 원인 일 수 있습니다.

API의 나머지 부분이 동기식이기 때문에 Google이 이러한 방식으로 설계 한 이유는 분명하지 않습니다. 즉, XML 레이아웃의 일부로 Fragment를 만든 경우 (인플레이터 사용) 작성됩니다 동 기적으로도 getView는 항상 값을 반환합니다.

가능한 해결책 : 다른 레이아웃 인플레이션 프로세스의 일부로 ViewGroup을 만드는 경우 효과가있을 수 있습니다.