Android开发之一个activity内多个fragment切换

Android开发之一个activity内多个fragment切换,第1张

概述整理一下最近的工作经验,最近的项目需要一个android程序接收Mqtt服务端发来的周期数据和命令,在几个界面中切换和显示数据。需求比较简单。这个小项目用到的技术有:fragment切换、service应用、dialogFragment、databinding、EventBus、mqtt、protobuf。这篇来介绍如何在一个activi

整理一下最近的工作经验,最近的项目需要一个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切换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址:https://www.54852.com/web/1066735.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存