1

Я пытаюсь отобразить вложенные объекты ListFragment внутри моего диалогового окна.Как программно добавить этот фрагмент в свой фрагмент?

Видимо, я не могу просто объявить <fragment> в XML для моего макета DialogFragment, потому что фрагментам-в-фрагментам нужен childFragmentManager. Так что я пытаюсь сделать это в моем DialogFragment:

Fragment listfragment = new ClassThatExtendsListFragment(); 
FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.add(????????, listfragment).commit(); 

я не имею ни малейшего понятия, что идентификатор ресурса мне нужно поставить в ???????? или как я даже собираюсь назначить его.

+0

http://stackoverflow.com/questions/18296868/how-to-add-a-fragment-to-a-programmatically-generated-layout try it .... –

ответ

1

просто добавьте FrameLayout в ваш макет. Предположим, вы дали это идентификатор, как «контейнер»,

Fragment exampleFragment = new ExampleFragment(); 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.container, exampleFragment).commit(); 
0

Я не уверен, какой тип макета вы используете для DialogFragment, но в целом в XML, который раздувает DialogFragment вам нужно добавить FrameLayout и важно дайте ему идентификатор. Затем, когда вы делаете вашу сделку фрагмента вы передаете идентификатор ресурса этого FrameLayout

XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></FrameLayout> 
</LinearLayout> 

Если вы хотите использовать вложенные фрагменты вам необходимо позвонить getChildFragmentManager():

FragmentManager fragmentManager = getChildFragmentManager() 

Затем для вашей операции фрагмента:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).commit(); 

Вы м IGHT хотите использовать add метод вместо replace, но вот до вас

Вы также можете добавить предыдущий фрагмент в backstack, если вы хотите, чтобы включить обратно нажатие кнопки:

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit(); 
+0

Это фрагмент фрагмента, поэтому вы не может использовать обычный менеджер. Также этот код, который я предполагаю, входит в метод oncreatedialog моего диалога? –

+0

Не заметил этого. В этом случае вы просто будете использовать childfragmentmanager вместо обычного managermanager. То, что вы передаете методу добавления/замены в качестве первого аргумента, будет одинаковым (идентификатор ресурса frameelayout, в котором вы хотите отобразить дополнительный фрагмент). – Simon

+0

. Где вы размещаете этот код, зависит от того, где/когда вы хотите, чтобы ListFragment для отображения. Как только вы выполните код выше, транзакция фрагмента будет зафиксирована, и все будет отображаться. Поэтому просто поместите его в нужное место, когда вы хотите, чтобы новый фрагмент ожил. – Simon

1

Мое требование также был таким же, как вы. ниже код работал для меня.

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    MyTripFragment myTripFragment = new MyTripFragment(); 
    fragmentTransaction.add(R.id.fragment_container, myTripFragment); 
    fragmentTransaction.commit(); 

код XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</LinearLayout> 

Надеется, что это поможет вам.

Смежные вопросы