fragment是我在做底部导航栏功能时使用到的,现在在这里做个记录。
1.fragment的简介
fragment是activity的子模块,可以理解为Activity片段,是不完整的Activity,有自己的生命周期,必须被嵌入Activity使用,被其所在的Activ的生命周期所控制。
2.fragment的特点
2.1 fragment总是作为Activity界面的组成部分
fragment可通过getActivity()
方法获取所在的Activity,Activity可以通过FragmentManager
的findFragmentById()
或findFragmentByTag()
来获取fragment。
2.2 添加、删除或替换fragment
在Activity运行中,可通过FragmentManager
的add()
、remove()
或replace()
来添加、删除或替换fragment。
2.3 复用性
一个Activity可以同时组合多个Fragment,一个Fragment也可以被多个Activity复用。
2.4 生命周期
Fragment有自己的生命周期,可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期所控制。
3.fragment的使用
3.1静态加载
静态加载是直接在布局文件中添加fragment组件。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include layout="@layout/title_bar"/>
<include layout="@layout/tool_bar"/>
<fragment
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/title_bar"
android:name="com.christieli.automaintenancemanagement.activity.FragmentApps"
tools:ignore="MissingConstraints"/>
</androidx.constraintlayout.widget.ConstraintLayout>
注:我将标题栏与底部导航栏写成了单独的布局文件,就不具体展示了。
创建Fragment,加载布局文件。
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.christieli.automaintenancemanagement.R;
public class FragmentApps extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_apps, container, false);
}
}
main.java
如下:
import android.view.View;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.christieli.automaintenancemanagement.activity.FragmentApps;
public class MainActivity extends FragmentActivity {
private Fragment mFragmentApps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentApps = new FragmentApps();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, mFragmentApps).commit();
}
}
这里需要注意的是,Activity必须继承FragmentActivity,否则会报错。
3.2动态加载
动态加载也是我做底部导航栏使用的一种主要的方式,具体的见我的博文:使用fragment实现底部导航菜单栏,链接:https://blog.csdn.net/lz050116/article/details/107191881。