2017-01-09 10 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

あなたのダイアログフラグメントのXMLを投稿してください。 – rafsanahmad007

+0

'activity_onboarding'レイアウトに' aonboarding_fl_inputs'というIDのフレームや他のレイアウトがありますか? –

+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(); 

NOTES:

uはアクティビティからfragmentを追加または交換するuは、フラグメントレイアウトから置き換える/フラグメントを追加する必要があるときにuが直接、その後に言及getFragmentManagerすなわち、あなたの活動のフラグメントマネージャを使用することができますが、 getFragmentManager()は、フラグメントxmlではなく親アクティビティのxmlから検索するコードを作成します。だからそこにあなたの提供されたIDを参照するビューが見つかりませんし、アプリケーションがクラッシュします。

現在のフラグメントを参照するには、getChildFragmentManager()を使用する必要があります。

+0

'getFragmentManager'と' getChildFragmentManager'の違いは何ですか – suku

+1

@suku:更新情報を参照してください – Beena

関連する問題