一:Fragment简介
二:Fragment生命周期
Activity和Fragment生命周期做比较【红箭头表示和ACtivity对应的方法一致】
onAttach():Fragment和Activity建立关联的时候调用
onCreateView():Fragment创建视图(加载布局)时调用
onActivityCreated():Fragment相关联的Activity已经创建完时调用
onDestriyView():Fragment关联的视图被移除时调用
onDetach:Fragment和Activity解除关联时的时候调用
三:创建Fragment
【注:创建一个名为test的Fragment】
【后端代码入下】
【删除目前用不到的部分剩下onCreateView(),该方法表示:Fragment创建视图(加载布局)时调用】
【前端:在fragment_test.xml中间位置显示test】
四:在Activity中添加Fragment
静态添加fragment
静态添加具体操作入下:
【将控件里的fragment拖动到界面即可】
【选择前面已经创建的fragment:test】
【成功静态添加fragment】
【运行程序】
动态添加fragment
在Activity中动态添加Fragment代码入下
五:实例练习(通过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:运行效果
【点击通讯录】
【点击发现】
【点击我】
【点击微信】