J'ai un ViewPager
avec deux pages comment puis-je supprimer un de Fragment
de ViewPager
et ajouter un autre Fragment
à ViewPager
?Android - Supprimer puis ajouter un fragment de ViewPager?
j'ai écrit ci-dessous le code, mais ne fonctionne pas:
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));
}
}
Ici, je dois supprimer un Fragment
et ajouter un autre Fragment
spécifique.
@Override
public void isLogin(LoginModel result) {
int position = viewPagerMainActivity.getCurrentItem();
adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position);
adapter.notifyDataSetChanged();
}
Ici, je dois enlever WorkTableFragment
de la position 0 et ajouter LoggedInFragment
en position 0.
Essayez d'appeler 'notifyDataSetChanged()' depuis la méthode 'addRemoveFragment', après avoir ajouté le fragment – Ricardo
Vous pouvez créer un BridgeFragment (l'ajouter dans l'adaptateur de viewpager) qui contient juste un frameLayout et le remplacer par le fragment que vous voulez –
S'il vous plaît guider plus et écrire un exemple de code. Merci . –