一、压缩包

fragmentManagers.zip

二、实现步骤

1.添加两个按钮和切换的页面放的容器framelayout

image.png

2.添加fragment,进行切换的片段

image.png

3.删除fragment自带且不需要的内容

image.png

4.动态切换fragment

image.png

三、整体代码

1.布局activity_main.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".MainActivity">
  9. <Button
  10. android:id="@+id/btn_one"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:text="@string/change"></Button>
  14. <Button
  15. android:id="@+id/btn_two"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:text="@string/replace"></Button>
  19. <FrameLayout
  20. android:id="@+id/fl_item"
  21. android:layout_width="match_parent"
  22. android:layout_height="match_parent"
  23. android:background="@color/colorPrimary"></FrameLayout>
  24. </LinearLayout>

2.布局fragment_blank_fragment1.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".fragment.BlankFragment1">
  7. <!-- TODO: Update blank fragment layout -->
  8. <TextView
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:text="@string/hello_blank_fragment" />
  12. </FrameLayout>

3.布局fragment_blank_fragment2.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".fragment.BlankFragment2">
  7. <!-- TODO: Update blank fragment layout -->
  8. <TextView
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:text="@string/这是第二个页面" />
  12. </FrameLayout>

4.MainActivity文件代码

  1. package com.example.fragmentmanagers;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.fragment.app.Fragment;
  4. import androidx.fragment.app.FragmentManager;
  5. import androidx.fragment.app.FragmentTransaction;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import com.example.fragmentmanagers.fragment.BlankFragment1;
  10. import com.example.fragmentmanagers.fragment.BlankFragment2;
  11. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. Button btn_one = findViewById(R.id.btn_one);
  17. btn_one.setOnClickListener(this);
  18. Button btn_two = findViewById(R.id.btn_two);
  19. btn_two.setOnClickListener(this);
  20. }
  21. @Override
  22. public void onClick(View v) {
  23. switch (v.getId()) {
  24. case R.id.btn_one:
  25. replaceFragment(new BlankFragment1());
  26. break;
  27. case R.id.btn_two:
  28. replaceFragment(new BlankFragment2());
  29. }
  30. }
  31. //动态切换fragment
  32. private void replaceFragment(Fragment fragment) {
  33. FragmentManager fragmentManager = getSupportFragmentManager();
  34. FragmentTransaction transaction = fragmentManager.beginTransaction();
  35. transaction.replace(R.id.fl_item,fragment);
  36. transaction.commit();
  37. }
  38. }

5.BlankFragment1文件代码

  1. package com.example.fragmentmanagers.fragment;
  2. import android.os.Bundle;
  3. import androidx.fragment.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import com.example.fragmentmanagers.R;
  8. public class BlankFragment1 extends Fragment {
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. }
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  15. Bundle savedInstanceState) {
  16. // Inflate the layout for this fragment
  17. return inflater.inflate(R.layout.fragment_blank_fragment1, container, false);
  18. }
  19. }

6.BlankFragment2文件代码

  1. package com.example.fragmentmanagers.fragment;
  2. import android.content.Context;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import androidx.fragment.app.Fragment;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import com.example.fragmentmanagers.R;
  10. public class BlankFragment2 extends Fragment {
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. }
  15. @Override
  16. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  17. Bundle savedInstanceState) {
  18. // Inflate the layout for this fragment
  19. return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
  20. }
  21. }

7.效果图:

  1. 1)点击change<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1623400078629-daf18b88-eedd-4e25-a034-4c85ef7ae204.png#clientId=u6aa22632-3a92-4&from=paste&height=588&id=u75f8602f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=588&originWidth=838&originalType=binary&ratio=1&size=87613&status=done&style=none&taskId=u8b814ee1-384f-4290-bac8-bbc1921ddc9&width=838)<br /> (2)点击replace<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1623400127692-76b174b2-440a-49f8-8551-a7b3fede6d58.png#clientId=u6aa22632-3a92-4&from=paste&height=615&id=ucc38b0ea&margin=%5Bobject%20Object%5D&name=image.png&originHeight=615&originWidth=837&originalType=binary&ratio=1&size=94794&status=done&style=none&taskId=uccce711e-da31-4daf-ad33-d479aa3efba&width=837)

四、片段切换的总结

1.创建一个待处理的fragment

2.获取FragmentManeger,一般都是通过getSupportFragmentManager()

3.开启一个事务transaction,一般调用fragmentManager的beginTransaction()

4.使用transaction进行fragment的替换

5.提交事务