如何在现有fragment上添加另一个fragment

如何在现有fragment上添加另一个fragment,第1张

首先,我认为值得一提的是......

"你不能替换静态定义的布局文件中的一个片段。您仅可替换你动态地添加通过 FragmentTransaction 的片段"

请参阅

Android: 不能替换另一个的一个片段

如何显示一个选项卡内的一个新片段?

这里是解决方案。

在 home_activity.xml,你应该离开空你 tabcontent。

<FrameLayout

android:id="@+id/tabcontent"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1" />

您的 Home_Activity

private FragmentTabHost mHost

public void changeFragment() {

FragmentTransaction ft = getSupportFragmentManager().beginTransaction()

EntertainmentFragment enFragment = new EntertainmentFragment()

ft.replace(R.id.tabcontent, enFragment)

ft.commit()

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

mHost = (FragmentTabHost) findViewById(android.R.id.tabhost)

mHost.setup(this, getSupportFragmentManager(), R.id.tabcontent)

mHost.addTab(mHost.newTabSpec("School")

.setIndicator("School"), SchoolFragment.class, null)

mHost.addTab(mHost.newTabSpec("Sport")

.setIndicator("Sport"), SportsFragment.class, null)

}

在您的 onIemClick (Sports_Fragment),添加这

MainActivity mainAct = (MainActivity)getActivity()

mainAct.changeFragment()

我充分的项目,基于您的代码,是在这里。

我还没有机会真的检查 TabHost 为什么不工作时我测试您的代码。但FragmentTabHost的作品对我很好。

编辑: 若要修复重叠问题,您可以设置 OnTabChangeListener:

mHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

@Override

public void onTabChanged(String tabId) {

// TODO Auto-generated method stub

if (tabId.equalsIgnoreCase("School")) {

Log.v(TAG, "school")

FragmentTransaction ft = getSupportFragmentManager()

.beginTransaction()

schoolFrag = new SchoolFragment()

ft.replace(R.id.tabcontent, schoolFrag)

ft.commit()

}

if (tabId.equalsIgnoreCase("Sport")) {

Log.v(TAG, "Sport")

FragmentTransaction ft = getSupportFragmentManager()

.beginTransaction()

SportsFragment sportFrag = new SportsFragment()

ft.replace(R.id.tabcontent, sportFrag)

ft.commit()

}

}

})

关于 backpress,您可以尝试

ft.addToBackStack(null)

1、首先,新建 FragmentTest.java 类继承 fragment

2、创建fragment中的布局 fragment_test.xml

3、创建activity中的布局 activity_main.xml

注意,这里的fragment控件一定要加 android:id="@+id/fragment_test" 不然会报异常

android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment

4、创建MainActivity.java

动态加载fragment的静态加载fragment的一、二步相同。从第三步开始。

3、创建activity_main.xml

Framelayout 是一个用来存放 Fragment 的容器

3、创建MainActivity.java类

Fragment中的onCreateView的时候 要求返回一个创建好的视图View,你只需要将你的

LinearLayout,定义在这个view中即可

关于Fragment介绍及生命同期:

1、Fragment的产生与介绍

Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。

2、Fragment的生命周期

Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:

可以看到Fragment比Activity多了几个额外的生命周期回调方法:onAttach(Activity)当Fragment与Activity发生关联时调用。onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCreateView想对应,当该Fragment的视图被移除时调用onDetach()与onAttach相对应,当Fragment与Activity关联被取消时调用.

注意:除了onCreateView,其他的所有方法如果你重写了,必须先调用父类的该方法


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11558671.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存