I have a ViewPager
with two page how can I remove one of Fragment
from ViewPager
and add another Fragment
to ViewPager
?
I wrote below code but doesn't work :
public class MainActivity extends AppCompatActivity implements WorkTableFragment.listenerLogin { @BindView(R.id.tabsMainActivity) TabLayout tabsMainActivity; @BindView(R.id.viewpagerMainActivity) ViewPager viewPagerMainActivity; private ViewPagerAdapter adapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); setupViewPager(viewPagerMainActivity); } private void setupViewPager(ViewPager viewPager) { adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new WorkTableFragment(), getString(R.string.workTable)); adapter.addFragment(MouFragment.newInstance(langID, lang), getString(R.string.mou)); viewPager.setAdapter(adapter); tabsMainActivity.setupWithViewPager(viewPager); viewPager.setCurrentItem(1); } @Override public void isLogin(LoginModel result) { int position = viewPagerMainActivity.getCurrentItem(); adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); adapter.notifyDataSetChanged(); } private class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } void addRemoveFragment(Fragment fragment, String title, int index) { mFragmentList.remove(index); mFragmentTitleList.remove(index); mFragmentList.add(index, fragment); mFragmentTitleList.add(title); } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } }
Here I need to remove a specific Fragment
and add another Fragment
.
@Override public void isLogin(LoginModel result) { int position = viewPagerMainActivity.getCurrentItem(); adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); adapter.notifyDataSetChanged(); }
Here I need to remove WorkTableFragment
from position 0 and add LoggedInFragment
in position 0 .