我试图从ViewPager替换片段,我不知道最好的方法来做到这一点。
为了更改片段我使用此代码:
Fragment productDetailFragment = RetarFragment.newInstance(null, null);
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.root_frame, productDetailFragment).commit();
其中R.id.root_frame是我将替换的片段的容器,它是FrameLayout。
问题在于,当我运行应用程序时,片段运行良好,但它位于旧片段上,应删除。
有没有更好的解决方案呢?
ViewPager的适配器是FragmentStatePagerAdapter
public class SectionsPagerAdapter extends FragmentStatePagerAdapter implements Serializable{
public static final int MENU_RETAR = 2;
public static final int MENU_BATALLA = 1;
int MENU_ACTUAL = MENU_BATALLA;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0: return new TimelineFragment();
case 1: return new SearchFragment();
case 2:
if(MENU_ACTUAL == MENU_RETAR){
return new RetarFragment();
}else{
return new MenuBatallaFragment();
}
case 3: return new NotificacionesFragment();
case 4: return new PerfilFragment().newInstance(this);
default:
return new TimelineFragment();
}
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
// Show 3 total pages.
return 5;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return null;
case 1:
return null;
case 2:
return null;
case 3:
return null;
case 4:
return null;
}
return null;
}
}
首先,您需要添加具有唯一标记的片段。然后,只要您想要删除旧片段替换,您需要删除具有该唯一片段标记的片段。
删除片段;
Fragment fragment =getSupportFragmentManager().findFragmentByTag(TAG);
if(fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
解决了
如果你在新片段的布局中设置了一个背景并且clickable =“true”它就会正确运行!