2017-01-09 5 views
-1

저는 strInfo의 값을 기반으로 조각을 필요로하는 레이아웃이 있습니다.대화 상자 조각에 단편 추가

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = getActivity().getLayoutInflater().inflate(R.layout.activity_onboarding, null); 
    Bundle bundle = getArguments(); 
    strInfo = bundle.getString(S.SP_USER_INFO); 

    //Lot of code regarding the view 

    return view; 
} 

조각의 뷰는 onViewCreated에 추가해야하며 조각은 먼저 컨테이너를 팽창해야한다고 생각합니다.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    int infoCount = 1; 
    switch (strInfo){ 
     case S.UserInfoPrefs.GOAL: 
      S.L("AOPOOP"); 
      infoCount = 1; 
      getFragmentManager().beginTransaction().add(R.id.aonboarding_fl_inputs, new TestFragment()).commit(); 
      break; 
     case S.UserInfoPrefs.WEIGHT: 
      infoCount = 3; 
      S.L("ASFLGH"); 
      //getFragmentManager().beginTransaction().add(R.id.aonboarding_fl_inputs, new WeightFragment()).commit(); 
      break; 
    } 
} 

는하지만이 오류가 점점 오전 :

java.lang.IllegalArgumentException: No view found for id 0x7f0f00a9 
(in.jiyofit.newjiyofit:id/aonboarding_fl_inputs) for fragment TestFragment 

은 내가 postDelayed 스레드 내부의 getFragmentManager을 넣어. activity_onboarding 레이아웃이 비정상적으로 확장되었습니다. 하지만 여전히 오류가 발생합니다.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:orientation="vertical" 
    android:gravity="center_horizontal" 
    android:layout_weight="0.15"> 

    //some code 

</LinearLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.35" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp" 
    android:gravity="center"> 

    //some code 

</RelativeLayout> 

<FrameLayout 
    android:id="@+id/aonboarding_fl_inputs" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.3"/> 

<Button 
    android:id="@+id/aonboarding_btn_proceed" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.1" 
    android:text="@string/submit" 
    style="@style/ProceedButtonStyle"/> 
+0

당신의 dialogfragment의 xml을 게시하십시오 .. – rafsanahmad007

+0

'activity_onboarding' 레이아웃에'aonboarding_fl_inputs' 아이디가있는 프레임이나 다른 레이아웃이 있습니까? –

+0

예 할 일 – suku

답변

3
getFragmentManager().beginTransaction().add(R.id.aonboarding_fl_inputs, new TestFragment()).commit(); 

가 다음 행으로 위의 라인을 변경 부모 레이아웃의

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:text="TEST" 
    android:gravity="center"/> 

</LinearLayout> 

XML : 이 TestFragment에 대한 XML이다.

this.getChildFragmentManager().beginTransaction().add(R.id.aonboarding_fl_inputs, new TestFragment()); 
    t.commit(); 

참고 : u는 추가하거나 다음 U 직접 getFragmentManager 즉 활동 조각 관리자를 사용할 수 있습니다 활동에서 fragment를 교체하지만, u는 추가 할 필요가있을 때/다음을 참조 단편 레이아웃에서 조각을 대체하는

getFragmentManager()은 조각 XML 대신 부모 활동의 xml에서 코드를 찾을 것입니다. 따라서 제공된 ID를 참조하는 뷰가 발견되지 않고 앱이 다운됩니다.

현재 조각을 참조하려면 getChildFragmentManager()을 사용해야합니다.

+0

'getFragmentManager'와'getChildFragmentManager'의 차이점 – suku

+1

@suku : 업데이트 된 정보 참조 – Beena