1 介绍
Fragment是一种可以嵌入在活动中的UI片段,能够让程序更加合理和充分地利用大屏幕的空间,出现的初衷是为了适应大屏幕的平板电脑,可以将其看成一个小型Activity,又称作Activity片段。
使用Fragment可以把屏幕划分成几块,然后进行分组,进行一个模块化管理。Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity的生命周期的影响
2. Fragment使用
使用Fragment有两种方式,分别是静态加载和动态加载
2.1 静态加载
关于静态加载的流程如下:
定义Fragment的xml布局文件
自定义Fragment类,继承Fragment类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View
View view=inflater.Inflater(布局文件,container,false)
在需要加载Fragment的Activity对应布局文件中
的name属性设为全限定类名,即包名.fragment
最后在Activity调用setContentView()加载布局文件即可
2.2 动态加载Fragment
动态加载Fragment的流程如下:
获得FragmentManager对象,通过
getSupportFragmentManager()
获得FragmentTransaction对象,通过
fm.beginTransaction()
调用
add()
方法或者repalce()
方法加载Fragment;最后调用
commit()
方法提交事务
实例-微信界面跳转
首先定义一个Fragment布局xml文件,重复以上操作新建其他xml文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/weixin">RelativeLayout>
创建一个Java文件,重写OnCreateView()方法,重复以上操作新建其他文件
package com.example.fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;import java.util.zip.Inflater;public class wxFragment extends Fragment{ @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.activity_wx,null); return super.onCreateView(inflater, container, savedInstanceState); }}
创建之后,如下图所示:
在主页面的布局文件中,设置布局和fragment
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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=".MainActivity"> <fragment android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/myFragmrnt" android:name="com.example.fragment.wxFragment" android:layout_above="@id/myliner"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:id="@+id/myliner"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bottom_1" android:id="@+id/wx" android:layout_weight="1"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bottom_2" android:id="@+id/tx" android:layout_weight="1"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bottom_3" android:id="@+id/fx" android:layout_weight="1"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bottom_4" android:id="@+id/wo" android:layout_weight="1"/> LinearLayout>RelativeLayout>
在主页面的JAVA文件中,设置fragment点击事件
package com.example.fragment;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView1=findViewById(R.id.wx); ImageView imageView2=findViewById(R.id.tx); ImageView imageView3=findViewById(R.id.fx); ImageView imageView4=findViewById(R.id.wo); imageView1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { wxFragment wx=new wxFragment(); FragmentTransaction ft=getSupportFragmentManager().beginTransaction(); ft.replace(R.id.myFragmrnt,wx); ft.commit(); } }); imageView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { txFragment tx=new txFragment(); FragmentTransaction ft=getSupportFragmentManager().beginTransaction(); ft.replace(R.id.myFragmrnt,tx); ft.commit(); } }); imageView3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fxFragment fx=new fxFragment(); FragmentTransaction ft=getSupportFragmentManager().beginTransaction(); ft.replace(R.id.myFragmrnt,fx); ft.commit(); } }); imageView4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { woFragment wo=new woFragment(); FragmentTransaction ft=getSupportFragmentManager().beginTransaction(); ft.replace(R.id.myFragmrnt,wo); ft.commit(); } }); }}