无法以编程方式将片段添加到活动

时间:2015-12-10 13:51:26

标签: android android-fragments

是。我知道有很多像我一样的问题,但是我看过它们(我猜)

我认为我做的一切都是正确的,但它仍然不起作用 我有一个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。

1 个答案:

答案 0 :(得分: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()而不是commit()。