2015-12-10 3 views
0

Да. Я знаю, что есть много вопросов, таких как мои, но я смотрел их всех (я думаю)Невозможно добавить фрагмент в действие программно

Я думаю, что я все делаю правильно, но он все еще не работает У меня есть frameLayout. Я попытался использовать add() вместо replace(), и это не работает.

Я пытаюсь добавить фрагмент в метод OnLoadFinished().

Мой код:

Bundle fragBundle = new Bundle(); 
fragmentManager = getFragmentManager(); 
fragmentTransaction = fragmentManager.beginTransaction(); 
ContactInfoFragment contactInfoFragment = (ContactInfoFragment) fragmentManager.findFragmentByTag("contactInfo"); 
if (contactInfoFragment == null){ 
    switch(type) { 
     case "44": { 
       //passing some data to bundle 
       break; 
      } 
      case "223":{ 
       //passing some data to bundle 
       break; 
      } 
     } 
     contactInfoFragment = new ContactInfoFragment(); 
     contactInfoFragment.setArguments(fragBundle); 
     fragmentTransaction.replace(R.id.contact_layout, contactInfoFragment, "contactInfo"); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     fragmentManager.executePendingTransactions(); 
    } 

Пожалуйста, помогите мне

Мой макет:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="0dp" 
android:paddingRight="0dp" 
android:paddingTop="0dp" 
android:paddingBottom="0dp" 
android:background="#ffffff" 
tools:context="com.example.tenderplan.activities.ElementActivity"> 

<ScrollView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:id="@+id/scrollView" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools"> 

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="0dp" 
android:paddingRight="0dp" 
android:paddingTop="0dp" 
android:paddingBottom="0dp" 
android:background="#ffffff" 
tools:context="com.example.tenderplan.activities.ElementActivity" 
android:id="@+id/element_layout" 
android:orientation="vertical"> 

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

    <fragment 
     android:name="com.example.tenderplan.fragments.DocumentsFragment" 
     android:id="@+id/documents_fragment" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     tools:layout="@layout/documents_fragment" 
     android:layout_below="@+id/contact_info_fragment" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_marginBottom="16dp" /> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/attachmentslayout2" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/documents_fragment"> 
    </LinearLayout> 

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

На самом деле, мне нужно contact_layout заменить.

+0

Какую версию Android вы поддерживаете? Вы вызываете этот код из «Фрагмента» или «Активность»? И можете ли вы разместить свой «Макет». – vguzzi

+0

min api 14, я вызываю это из Activity. w8 в минуту, плохо добавить макет –

+0

Вызывается метод 'onLoadFinish()'? –

ответ

1

Вы не должны совершать сделки фрагмент в onLoadFinish, вы можете прочитать:

Вызывается, когда ранее созданный загрузчик завершил свою нагрузку. Обратите внимание, что обычно приложению не разрешается совершать транзакции фрагментов во время этого вызова, так как это может произойти после сохранения состояния активности. См. FragmentManager.openTransaction() для дальнейшего обсуждения этого вопроса.

https://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html#onLoadFinished%28android.content.Loader%3CD%3E,%20D%29

http://developer.android.com/reference/android/app/FragmentManager.html#beginTransaction()

так, что вы должны сделать, это использовать commitAllowingStateLoss() вместо фиксации().

+0

Большое спасибо. Он работает сейчас. –

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