-1

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.

+0

Essayez d'appeler 'notifyDataSetChanged()' depuis la méthode 'addRemoveFragment', après avoir ajouté le fragment – Ricardo

+0

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 –

+0

S'il vous plaît guider plus et écrire un exemple de code. Merci . –

Répondre

0

Dans ce cas notifyDataSetChanged() ne fonctionnera pas Vous devez définir l'adaptateur ensemble et réglez le dernier élément ouvert

@Override 
public void isLogin(LoginModel result) { 
    int position = viewPagerMainActivity.getCurrentItem(); 
    adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); 
    viewPager.setAdapter(adapter); 
    tabsMainActivity.setupWithViewPager(viewPager); 
    viewPager.setCurrentItem(yourLastItemPosition); 

} 

Set 'LoggedInFrament' directement comme dans 'addRemoveFragment()'

void addRemoveFragment(Fragment fragment, String title, int index) { 
      mFragmentList.set(index, fragment); 
     } 
+0

@ Burhanuddin Rashid. Pas travaillé . –

+0

Vérifier ma mise à jour de la réponse –

+0

Hmmmm. Pas travaillé. –