为什么写这篇文章呢,那就是因为我的博客登记快三级了还差一点积分我现在这是在刷积分,不过不用担心我还是会好好写的,嘿嘿。。。
说一下这个工具类的使用场景;
场景一:应用主界面点击底部按钮进行Fragment切换显示的时候。
场景二:没有了,反正就是你要用到多个Fragment进行显示隐藏切换的时候你就可以用到它,但是别太多呀五六个还行如果你要切换的页面太多了就会有点卡,慎用。
废话不多先把源码贴上:
/**
* @author zhanglei
* @date 17/06/21
*/
public class FragmentHelper {
private AppCompatActivity mActivity;
private Fragment hideFragment;
private FragmentHelper(Builder builder) {
mActivity = builder.mActivity;
}
/**
* 显示Fragment
*
* @param fragment
*/
public void showFragment(Fragment fragment) {
if (hideFragment != null) {
hideFragment(hideFragment);
}
FragmentTransaction transaction = mActivity.getSupportFragmentManager().beginTransaction();
transaction.show(fragment).commit();
hideFragment = fragment;
}
/**
* 隐藏Fragment
*
* @param fragment
*/
private void hideFragment(Fragment fragment) {
FragmentTransaction transaction = mActivity.getSupportFragmentManager().beginTransaction();
transaction.hide(fragment).commit();
}
public static IParentLayout builder(AppCompatActivity activity) {
return new Builder(activity);
}
public interface IParentLayout {
public IFragmentInterface attach(int layoutId);
}
public interface IFragmentInterface {
public IFragmentInterface addFragment(Fragment fragment);
public IFragmentSetting beginSettings();
public FragmentHelper commit();
}
public interface IFragmentSetting {
public IFragmentInterface endSettings();
}
public static class Builder implements IParentLayout, IFragmentInterface, IFragmentSetting {
private final FragmentTransaction transaction;
private int layoutId;
private AppCompatActivity mActivity;
private List<Fragment> mList = new ArrayList<>();
private Builder(AppCompatActivity context) {
mActivity = context;
transaction = mActivity.getSupportFragmentManager().beginTransaction();
}
@Override
public IFragmentInterface attach(int layoutId) {
this.layoutId = layoutId;
return this;
}
@Override
public IFragmentInterface addFragment(Fragment fragment) {
mList.add(fragment);
transaction.add(layoutId, fragment).hide(fragment);
return this;
}
@Override
public IFragmentSetting beginSettings() {
return this;
}
@Override
public FragmentHelper commit() {
transaction.commit();
return new FragmentHelper(this);
}
@Override
public IFragmentInterface endSettings() {
return this;
}
}
}
使用方法:
fragmentHelper = FragmentHelper
.builder(mActivity)//传一个Activity
.attach(R.id.main_rl)//Fragment要依附到那个布局上(布局id)
.addFragment(homeFragment)//添加Fragment
.addFragment(serviceFragment)//添加Fragment
.addFragment(personFragment)//添加Fragment
.commit();//最后提交
//提交后所有的Fragment都是默认不显示的,你想显示那个你就调用showFragment方法将它显示出来
fragmentHelper.showFragment(homeFragment);
一个简单的布局代码:
<?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"
android:orientation="vertical"
android:background="@color/bg_color"
tools:context="com.zl.makecard.ui.activity.MainActivity">
<android.support.design.widget.BottomNavigationView
android:id="@+id/main_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
app:itemIconTint="@color/main_bottom_color_selector"
app:itemTextColor="@color/main_bottom_color_selector"
app:menu="@menu/main_menu">
</android.support.design.widget.BottomNavigationView>
<RelativeLayout
android:id="@+id/main_rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/main_bottom">
</RelativeLayout>
</RelativeLayout>
看到这个布局代码大家应该知道attach方法的参数怎么传了吧。
这个工具类的代码也很少大概也就100行的样子,大家看看也能理解是什么意思。
这个工具类用起来也很简单,先addFragment 然后 commit 最后你就可以掉用showFragment和hideFragment尽情的玩耍啦。
嘿嘿,本人菜鸟一个在写这个工具类的时候没有考虑内存呀、优化呀等这些问题,希望有大神能看到这篇文章看看我这个工具类还能怎么改,毕竟我也一直在用。
谢谢啦。