Fragment 极简管理工具

关于Fragment的切换操作,可使用以下简单工具

/**
 * Created by LinLin on 2018/6/6.
 * Fragment适配器
 */

public interface MagicFragmentAdapter
{
    /**
     * 获取某个Fragment
     * */
    android.support.v4.app.Fragment getFragment(int position);

    /**
     * 获取某个Fragment标识
     * */
    String getTag(int position);

    /**
     * 获取Fragment数量
     * */
    int getCount();

}
/**
 * Created by LinLin on 2018/6/6.
 * Fragment 管理工具
 */

public class MagicFragmentManager
{
    private static final String CURRENT_INDEX = "current_index";
    private FragmentManager mFragmentManager;
    private MagicFragmentAdapter mAdapter;
    @IdRes
    private int mContainerIds;

    private int mCurrentIndex = -1;


    public static MagicFragmentManager newInstance(FragmentManager mFragmentManager, MagicFragmentAdapter mAdapter, @IdRes int mContainerIds)
    {
        MagicFragmentManager manager = new MagicFragmentManager();
        manager.mFragmentManager = mFragmentManager;
        manager.mAdapter = mAdapter;
        manager.mContainerIds = mContainerIds;
        return manager;
    }

    private MagicFragmentManager()
    {
    }

    /**
     * 恢复下标
     * */
    public void onRestored(@Nullable Bundle savedInstanceState)
    {
        if (null != savedInstanceState)
            mCurrentIndex = savedInstanceState.getInt(CURRENT_INDEX, 0);
    }
    /**
     * 存储下标
     * */
    public void onSaved(@Nullable Bundle outState)
    {
        if (null != outState)
            outState.putInt(CURRENT_INDEX, mCurrentIndex);
    }

    /**
     * 展示某个Fragment
     * */
    public void showFragment(int position)
    {
        int count = mAdapter.getCount();

        if (position > -1 && position < count)
        {
            this.mCurrentIndex = position;
            FragmentTransaction transaction = mFragmentManager.beginTransaction();
            for (int i = 0; i < count; i++)
            {
                String tag = mAdapter.getTag(i);
                Fragment fragment = mFragmentManager.findFragmentByTag(tag);
                if (position == i)
                {
                    if (null == fragment)
                        transaction.add(mContainerIds, mAdapter.getFragment(i), tag);
                    else
                        transaction.show(fragment);
                } else
                {
                    if (null != fragment)
                        transaction.hide(fragment);
                }
            }
            transaction.commit();
        }
    }


    /**
     * 移除所有
     * */
    public void removeAll()
    {
        this.mCurrentIndex = 0;
        int count = mAdapter.getCount();
        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        for (int i = 0; i < count; i++)
        {
            String tag = mAdapter.getTag(i);
            Fragment fragment = mFragmentManager.findFragmentByTag(tag);
            if (null != fragment)
                transaction.remove(fragment);
        }
        transaction.commit();
    }


    /**
     * 获取下标
     * */
    public int getCurrentIndex()
    {
        return mCurrentIndex;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值