private class TagPagerAdapter extends FragmentPagerAdapter
{
private FragmentManager fragmentManager;
private List<String> tags;
private Fragment[] fragments;
public TagPagerAdapter(FragmentManager fm)
{
super(fm);
this.fragmentManager = fm;
this.fragments = fragments;
this.tags = new ArrayList<>();
}
@Override
public int getCount()
{
return types.size();
}
@Override
public Fragment getItem(int position)
{
return fragments[position];
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
tags.add(makeFragmentName(container.getId(), getItemId(position)));
Fragment fragment = (Fragment) super.instantiateItem(container, position);
this.fragmentManager.beginTransaction().show(fragment).commit();
return fragment;
}
public void setNewFragments(Fragment[] fragments)
{
if (this.tags != null)
{
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (int i = 0; i < tags.size(); i++)
{
fragmentTransaction.remove(fragmentManager.findFragmentByTag(tags.get(i)));
}
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
tags.clear();
}
this.fragments = fragments;
notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
Fragment fragment = fragments[position];
fragmentManager.beginTransaction().hide(fragment).commit();
}
@Override
public CharSequence getPageTitle(int position)
{
return types.get(position).name;
}
@Override
public int getItemPosition(Object object)
{
return POSITION_NONE;
}
private String makeFragmentName(int viewId, long id)
{
return "android:switcher:" + viewId + ":" + id;
}
}
adapter如上,刷新时用
setNewFragments(fragments)