赞
踩
Activity和Fragment生命周期做比较【红箭头表示和ACtivity对应的方法一致】
onAttach():Fragment和Activity建立关联的时候调用
onCreateView():Fragment创建视图(加载布局)时调用
onActivityCreated():Fragment相关联的Activity已经创建完时调用
onDestriyView():Fragment关联的视图被移除时调用
onDetach:Fragment和Activity解除关联时的时候调用
【注:创建一个名为test的Fragment】
【后端代码入下】
【删除目前用不到的部分剩下onCreateView(),该方法表示:Fragment创建视图(加载布局)时调用】
【前端:在fragment_test.xml中间位置显示test】
静态添加fragment
静态添加具体操作入下:
【将控件里的fragment拖动到界面即可】
【选择前面已经创建的fragment:test】
【成功静态添加fragment】
【运行程序】
动态添加fragment
在Activity中动态添加Fragment代码入下
这里通过简洁版微信界面相互切换为例
1:项目架构
MyMessageFragment:对应微信“我的信息”界面 WeChatFragment:对应微信“微信首页”界面
DiscoverFragment:对应微信“发现界面”界面 ContactsFragment:对应微信“联系人界面”界面
【联系人界面】
【发现界面】
【我的信息】
【微信首页】
2:activity_main.xml前端布局代码
【界面入下】
【代码详情入下】
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/frameLayout" android:layout_width="407dp" android:layout_height="0dp" android:layout_marginTop="8dp" android:layout_marginBottom="14dp" app:layout_constraintBottom_toTopOf="@+id/btn_wechat" app:layout_constraintEnd_toStartOf="@+id/btn_discover" app:layout_constraintStart_toStartOf="@+id/btn_discover" app:layout_constraintTop_toTopOf="parent"> </FrameLayout> <Button android:id="@+id/btn_wechat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="18dp" android:text="微信" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/btn_contacts" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/frameLayout" /> <Button android:id="@+id/btn_contacts" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="通讯录" app:layout_constraintEnd_toStartOf="@+id/btn_discover" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/btn_wechat" app:layout_constraintTop_toTopOf="@+id/btn_wechat" /> <Button android:id="@+id/btn_discover" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发现" app:layout_constraintEnd_toStartOf="@+id/btn_mymessage" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/btn_contacts" app:layout_constraintTop_toTopOf="@+id/btn_contacts" /> <Button android:id="@+id/btn_mymessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/btn_discover" app:layout_constraintTop_toTopOf="@+id/btn_discover" /> </androidx.constraintlayout.widget.ConstraintLayout>
3:MainActivity代码详情
package cn.cg.wechat; import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; public class MainActivity extends AppCompatActivity { private Fragment weChat,contacts,discover,myMessage; private FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InintView(); findViewById(R.id.btn_wechat).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragmentManager.beginTransaction().replace(R.id.frameLayout,weChat).commit(); } }); findViewById(R.id.btn_contacts).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragmentManager.beginTransaction().replace(R.id.frameLayout,contacts).commit(); } }); findViewById(R.id.btn_discover).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragmentManager.beginTransaction().replace(R.id.frameLayout,discover).commit(); } }); findViewById(R.id.btn_mymessage).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fragmentManager.beginTransaction().replace(R.id.frameLayout,myMessage).commit(); } }); } //初始化操作 private void InintView() { //【1】实例化Fragment的实例对象:weChat,contacts,discover,myMessage为Fragment对象 weChat=new WeChatFragment(); contacts=new ContactsFragment(); discover=new DiscoverFragment(); myMessage=new MyMessageFragment(); //这个已经不在维护,不推荐使用 // fragmentManager=getFragmentManager(); //【2】获得FragmentManager(Dragment管理器)对象 fragmentManager=getSupportFragmentManager(); //【3】开启事务 FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); //【4】向Activity的布局容器(一般为FrameLayout)中添加Fragment fragmentTransaction.replace(R.id.frameLayout,weChat); //【5】提交事务 fragmentTransaction.commit(); } }
向Activity的布局容器(一般为FrameLayout)中添加Fragment除了replace()还有add()方法
replace()和add()的区别我在网上随便找了一篇,链接入下
Fragment中replace和add的区别
4:运行效果
【点击通讯录】
【点击发现】
【点击我】
【点击微信】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。