关于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;
}
}