在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>
答案 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()
方法。这会将动作添加到活动的历史堆栈中,即,这将允许通过后退按钮恢复碎片更改。