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

我把getFragmentManager一个postDelayed线程内。 activity_onboarding布局正在充气得很好。但我仍然得到错误。 这是TestFragment的XML:

<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> 

父布局

<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布局中,您是否有任何带有id aonboarding_fl_inputs的框架或其他布局? –

+0

是的,我确实有 – suku

回答

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

与以下行更改上述各行的XML。

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

注:

当U添加或从活动取代fragment则可以直接使用u您的活动片段经理即getFragmentManager但是当u需要添加/替换的片段布局片段,然后指getFragmentManager()将使代码从您的父级活动的xml中找到,而不是片段xml。所以它不会找到任何提及您提供的id的视图,并且应用会崩溃。

您需要使用getChildFragmentManager()来引用当前片段。

+0

'getFragmentManager'和'getChildFragmentManager'有什么区别 – suku

+1

@suku:引用更新信息 – Beena