效果图
话不多说,直接上代码,注释详细
1. activity_fragment.xml
<?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=".fragment.FragmentActivity">
<FrameLayout
android:id="@+id/framelayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/mypink"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="72dp"
android:padding="10dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/shape_button_pink_corners"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:text="碎片一"/>
<Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/shape_button_pink_corners"
android:text="碎片二"/>
</LinearLayout>
</LinearLayout>
2. fragment_1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/mypink"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="碎片一"/>
</LinearLayout>
3. Fragment1
/**
* create by 星航指挥官
* create on 2020/8/30
* 我为天帝 当镇压世间一切敌
* 遮天
*/
public class Fragment1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_1,container,false);
return view;
}
}
Fragment2的代码和布局跟Fragment1除了名字之外没有任何区别,就不贴了
4. FragmentActivity
public class FragmentActivity extends BaseActivity {
@BindView(R.id.framelayout)
FrameLayout framenlayout;
@BindView(R.id.btn1)
Button btn1;
@BindView(R.id.btn2)
Button btn2;
private Fragment1 fragment1;
private Fragment2 fragment2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
ButterKnife.bind(this);
initFragment();
}
/*
* 创建碎片
* */
private void createFragment(Fragment fragment){
//获取FragmentManager
FragmentManager fragmentManager = getSupportFragmentManager();
//开启一个事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
/*
* 向容器添加一个碎片
* 包括两种方法,add()和replace()
* add()是添加进去,始终存在,通过show和hide控制显隐,可以复用
* replace()会把相同ID的碎片删除,重新加载,数据和状态会还原
* 一般主页的碎片用add(),展示消息什么的用replace()
* */
transaction.add(R.id.framelayout,fragment);
//提交事务
transaction.commit();
//也可以简写为这样:
//getSupportFragmentManager().beginTransaction().add(R.id.framelayout,fragment).commit();
}
/*
* 隐藏碎片
* */
private void hideFragment(Fragment fragment){
//我们使用简写 通过FragmentManager开启一个隐藏碎片的事务并提交
getSupportFragmentManager().beginTransaction().hide(fragment).commit();
}
/*
* 显示碎片
* */
private void showFragment(Fragment fragment){
//我们使用简写 通过FragmentManager开启一个显示碎片的事务并提交
getSupportFragmentManager().beginTransaction().show(fragment).commit();
}
/*
* 加载碎片
* */
private void initFragment(){
//获取碎片实例,定义为全局变量方便其他地方使用
fragment1 = new Fragment1();
fragment2 = new Fragment2();
//分别创建两个碎片
createFragment(fragment1);
createFragment(fragment2);
//将创建的碎片隐藏
hideFragment(fragment1);
hideFragment(fragment2);
//显示我们想要展示的碎片
showFragment(fragment1);
}
@OnClick({R.id.btn1, R.id.btn2})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn1:
//隐藏碎片2
hideFragment(fragment2);
//显示碎片1
showFragment(fragment1);
break;
case R.id.btn2:
//隐藏碎片1
hideFragment(fragment1);
//显示碎片2
showFragment(fragment2);
break;
}
}
}
继承的BaseActivity是自定义类,不明白的直接改为继承Activity即可
ButterKnife是注解工具,作用是通过ID快速绑定布局中的控件,可以自己写,也可以去学一学怎么用,超级方便,我后续会写ButterKnife的相关博客。
kee