
整理一下最近的工作经验,最近的项目需要一个androID程序接收Mqtt服务端发来的周期数据和命令,在几个界面中切换和显示数据。需求比较简单。
这个小项目用到的技术有:fragment切换、service应用、dialogFragment、databinding、EventBus、mqtt、protobuf。
这篇来介绍如何在一个activity中切换多个fragment,以及fragment的静态加载和动态加载方式。
如何在一个activity中切换多个fragment,以及fragment的静态加载和动态加载方式1、fragment的静态加载方式
新建好fragment类后在activity_main.xml 文件中使用如下:
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".activitys.MainActivity" androID:orIEntation="vertical"><include layout="@layout/nav_bar"/><FrameLayout //这里就是要动态切换的fragment androID:ID="@+ID/main_layout" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:layout_weight="1"/><VIEw androID:background="@color/transcolor"/><fragment //这是是fragment的静态加载方式 androID:ID="@+ID/fragment_couchInfo" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:name="com.nms.ird.vIEws.CouchFragment"/><VIEw androID:background="@color/transcolor"/><include layout="@layout/state_bar" /></linearLayout>
程序在启动后就能看到在主界面上的静态fragment页面了。
2、fragment动态加载
主要分为五步:
创建待添加的碎片实例
获取FragmentManager,在activity中可以直接通过调用getSupportFragmentManager()方法得到。
开启一个事务,通过调用beginTransaction()方法开启。
向容器内添加或替换碎片,add,show,hIDe,replace等方法实现需要传入容器的ID和待添加的碎片实例。
提交事务,调用commit() 方法来完成。
fragment的活动周期:
@H_@R_419_6940@_51@
在activity的后台代码如下:
public class MainActivity extends BaseActivitiy implements GestureDetector.OnGestureListener { private Fragment mPatIEntInfoFragment; private Fragment mpositionFragment; private Fragment mRegistrationAndBeamOnFragment; private Fragment mlogoFragment; private String TAG = this.getClass().getSimplename(); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); //根据传入的Bundle对象判断Activity是正常启动还是销毁重建 if(savedInstanceState == null){ //设置第一个Fragment默认选中 setFragment(REGANDBEAM_FRA); Log.e( TAG,"当前线程为:"+ Thread.currentThread() ); } } public voID setFragment(FragmentType index) { //获取Fragment管理器 FragmentManager mFragmentManager = getSupportFragmentManager(); //开启事务 FragmentTransaction mTransaction = mFragmentManager.beginTransaction(); //隐藏所有Fragment hIDeFragments(mTransaction); switch (index){ default: break; case logo_FRA: //显示对应Fragment if(mlogoFragment == null){ mlogoFragment = new logoFragment(); mTransaction.add(R.ID.main_layout, mlogoFragment, "logo_fragment"); }else { mTransaction.show(mlogoFragment); } break; case PATIENTINFO_FRA: if(mPatIEntInfoFragment == null){ mPatIEntInfoFragment = new PatIEntInfoFragment(); mTransaction.add(R.ID.main_layout, mPatIEntInfoFragment, "patIEnt_info_fragment"); }else { mTransaction.show(mPatIEntInfoFragment); } break; case position_FRA: if(mpositionFragment == null){ mpositionFragment = new positionFragment(); mTransaction.add(R.ID.main_layout, mpositionFragment, "position_fragment"); }else { mTransaction.show(mpositionFragment); } break; case REGANDBEAM_FRA: if(mRegistrationAndBeamOnFragment == null){ mRegistrationAndBeamOnFragment = new RegistrationFragment(); mTransaction.add(R.ID.main_layout, mRegistrationAndBeamOnFragment, "registration_and_beam_on_fragment"); }else { mTransaction.show(mRegistrationAndBeamOnFragment); } break; } //提交事务 mTransaction.commitAllowingStateLoss(); currentFragment = index; } //隐藏Fragment private voID hIDeFragments(FragmentTransaction transaction) { if(mlogoFragment != null){ transaction.hIDe(mlogoFragment); } if(mPatIEntInfoFragment != null){ transaction.hIDe(mPatIEntInfoFragment); } if(mpositionFragment != null){ transaction.hIDe(mpositionFragment); } if(mRegistrationAndBeamOnFragment != null){ transaction.hIDe(mRegistrationAndBeamOnFragment); } }}
总结
以上是内存溢出为你收集整理的Android开发之一个activity内多个fragment切换全部内容,希望文章能够帮你解决Android开发之一个activity内多个fragment切换所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)