2017-01-09 4 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 становится завышенным. Но все же я получаю ошибку. Это XML для TestFragment:

<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 родительского макета

<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

У вас есть фрейм или другой макет с id 'aonboarding_fl_inputs' в макете' activity_onboarding'? –

+0

да У меня есть это – suku

ответ

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

Изменить свои вышеуказанные строки со следующими линиями.

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

ПРИМЕЧАНИЕ:

Когда у добавления или замена fragment от деятельности, то и может непосредственно использовать активность менеджер фрагмент т.е. getFragmentManager, но когда и нужно добавить/заменить фрагмент из макета фрагмента затем со ссылкой на getFragmentManager() сделает код для поиска из xml вашей родительской активности вместо фрагмента xml. Поэтому он не найдет никакого вида, ссылающегося на ваш предоставленный идентификатор, и приложение будет аварийно завершено.

Чтобы использовать текущий фрагмент, вам необходимо использовать getChildFragmentManager().

+0

В чем разница между 'getFragmentManager' и' getChildFragmentManager' – suku

+1

@suku: см. Обновленную информацию – Beena