片段不能使用片段标签,在framelayout中工作

时间:2015-12-16 05:24:58

标签: android android-layout android-fragments android-activity android-framelayout

在XML布局中使用片段标记时,片段不起作用。但是,在将片段标记替换为Framelayout之后,它可以正常工作,而不会对我的代码进行任何更改。

当我使用下面的代码片段时,不会改变/工作。

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

但是,当我用上面的代码替换上面的代码时,它会改变/工作。

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

    Fragment2 fragment2 = new Fragment2();
    fragmentTransaction.replace(R.id.fragment_container, fragment2);
    fragmentTransaction.commit();

Java代码:

<ion-view view-title="Sign up">

 <ion-nav-bar class="bar-positive">          
   <ion-nav-back-button></ion-nav-back-button>
  <ion-nav-buttons side="left">
   <button menu-toggle="left" class="button button-icon icon ion-navicon stable"></button>
   </ion-nav-buttons>
 </ion-nav-bar>

<ion-content> </ion-content>
</ion-view>

2 个答案:

答案 0 :(得分:1)

如果你想要渗透到另一个片段,你必须使用
 getChildFragmentManager()而不是getFragmentManager()

FragmentManager fobject = getChildFragmentManager();
FragmentTransaction transaction = fobject .beginTransaction();
fragment_container= fobject .findFragmentById(R.id.fragment_container);

if (fragment_container!= null) {
transaction.replace(R.id.fragment_container, yournewfragment);
transaction.commit();
}
transaction.commit();

答案 1 :(得分:0)

静态地将片段添加到布局文件

要使用新片段,可以将其静态添加到XML布局。在这种情况下,android:name属性指向相应的类,如以下代码片段所示。

<fragment
    android:id="@+id/listFragment"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="match_parent"
    class="com.example.android.rssreader.MyListFragment" ></fragment>
<fragment
    android:id="@+id/detailFragment"
    android:layout_width="0dp"
    android:layout_weight="2"
    android:layout_height="match_parent"
    class="com.example.android.rssreader.DetailFragment" >
</fragment>

如果您为不同的设备配置使用不同的静态布局文件,则使用此方案很有意义。

处理片段中的动态

通过getFragmentManager()方法可以在活动中访问的类允许您在活动布局中添加,删除和替换片段。

必须通过FragmentTransaction类在事务中执行修改。

要修改活动中的片段,通常在布局文件中定义FrameLayout占位符。

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

<FrameLayout
    android:id="@+id/detailscontainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone" />

使用FragmentManager将容器替换为片段。

// get fragment manager
FragmentManager fm = getFragmentManager();

// add
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.your_placehodler, new YourFragment());
// alternatively add it with a tag
// trx.add(R.id.your_placehodler, new YourFragment(), "detail");
ft.commit();

// replace
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.your_placehodler, new YourFragment());
ft.commit();

// remove
Fragment fragment = fm.findFragmentById(R.id.your_placehodler);
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit(); 

新片段替换此容器中的现有片段。

如果要将事务添加到Android的Backstack,请使用addToBackStack()方法。这会将动作添加到活动的历史堆栈中,即,这将允许通过后退按钮恢复碎片更改。