【问题标题】:How to add child fragment inside parent fragment android?如何在父片段android中添加子片段?
【发布时间】:2014-04-15 05:56:13
【问题描述】:

我有主布局。我想在主 LinearLayout 中添加片段。但是如果我想在主片段中添加子片段,它当前存在并且可见。

<LinearLayout
    android:id="@+id/linearlayout_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/footer"
    android:layout_below="@id/header"
    android:orientation="vertical" >
</LinearLayout>

在片段活动中,我添加了这个:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

HomeFragment homeFragment = HomeFragment.newInstance();
homeFragment.setRetainInstance(true);
fragmentTransaction.replace(R.id.linearlayout_fragment, homeFragment);
fragmentTransaction.commit();

现在我想在当前主片段中添加子片段:

FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

RepairFragment repairFragment = RepairFragment.newInstance();
repairFragment.setRetainInstance(true);
fragmentTransaction.add(R.id.linearlayout_fragment, repairFragment);
fragmentTransaction.commit();

但我遇到了异常:

04-15 11:18:26.394: E/AndroidRuntime(12561): FATAL EXCEPTION: main
04-15 11:18:26.394: E/AndroidRuntime(12561): java.lang.IllegalArgumentException: No view found for id 0x7f070005 (com.test.simple:id/linearlayout_fragment) for fragment RepairFragment{42319fb0 #0 id=0x7f070005}
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.os.Handler.handleCallback(Handler.java:730)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.os.Looper.loop(Looper.java:176)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at android.app.ActivityThread.main(ActivityThread.java:5493)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at java.lang.reflect.Method.invokeNative(Native Method)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at java.lang.reflect.Method.invoke(Method.java:525)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
04-15 11:18:26.394: E/AndroidRuntime(12561):    at dalvik.system.NativeStart.main(Native Method)

我试过了:

fragmentTransaction.replace(getParentFragment().getId(), repairFragment);
fragmentTransaction.replace(getView().getId(), repairFragment);

【问题讨论】:

  • 所以你想fragment into fragment到fragmentactivity?
  • 没有。片段中的片段在片段活动中

标签: android android-fragments android-nested-fragment


【解决方案1】:

所以尝试另一个 xml

       <FrameLayout
            android:id="@+id/linearlayout_fragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/footer"
            android:layout_below="@id/header" >

        </FrameLayout>

【讨论】:

    【解决方案2】:

    解决了。刚刚为父片段布局分配了 id

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout_repair_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/textview_repair"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="repair" />
    
        <TextView
            android:id="@+id/textview_repair_1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="repair 1 " />
    
    </LinearLayout>
    

    fragmentTransaction.replace(R.id.linearlayout_repair_fragment, repairFragment);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多