一、压缩包
fragmentManagers.zip
二、实现步骤
1.添加两个按钮和切换的页面放的容器framelayout
2.添加fragment,进行切换的片段
3.删除fragment自带且不需要的内容
4.动态切换fragment
三、整体代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/btn_one" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/change"></Button> <Button android:id="@+id/btn_two" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/replace"></Button> <FrameLayout android:id="@+id/fl_item" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary"></FrameLayout></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragment.BlankFragment1"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" /></FrameLayout>
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragment.BlankFragment2"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/这是第二个页面" /></FrameLayout>
4.MainActivity文件代码
package com.example.fragmentmanagers;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentManager;import androidx.fragment.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.example.fragmentmanagers.fragment.BlankFragment1;import com.example.fragmentmanagers.fragment.BlankFragment2;public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_one = findViewById(R.id.btn_one); btn_one.setOnClickListener(this); Button btn_two = findViewById(R.id.btn_two); btn_two.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_one: replaceFragment(new BlankFragment1()); break; case R.id.btn_two: replaceFragment(new BlankFragment2()); } } //动态切换fragment private void replaceFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.fl_item,fragment); transaction.commit(); }}
5.BlankFragment1文件代码
package com.example.fragmentmanagers.fragment;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.example.fragmentmanagers.R;public class BlankFragment1 extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_blank_fragment1, container, false); }}
6.BlankFragment2文件代码
package com.example.fragmentmanagers.fragment;import android.content.Context;import android.net.Uri;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.example.fragmentmanagers.R;public class BlankFragment2 extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_blank_fragment2, container, false); }}
7.效果图:
(1)点击change<br /><br /> (2)点击replace<br />
四、片段切换的总结
1.创建一个待处理的fragment
2.获取FragmentManeger,一般都是通过getSupportFragmentManager()
3.开启一个事务transaction,一般调用fragmentManager的beginTransaction()
4.使用transaction进行fragment的替换
5.提交事务