-1

Ich habe eine ViewPager mit zwei Seiten, wie kann ich einen von Fragment von ViewPager entfernen und einen weiteren Fragment zu ViewPager hinzufügen?Android - Entfernen, dann Fragment von ViewPager hinzufügen?

ich Code unten geschrieben, funktioniert aber nicht:

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)); 
    } 
} 

Hier muss ich einen anderen Fragment eine bestimmte Fragment und fügen Sie entfernen.

@Override 
public void isLogin(LoginModel result) { 
    int position = viewPagerMainActivity.getCurrentItem(); 
    adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); 
    adapter.notifyDataSetChanged(); 

} 

Hier muss ich WorkTableFragment von Position entfernen 0 und fügen LoggedInFragment in Position 0.

+0

Versuchen Sie, 'notifyDataSetChanged()' aus der Methode 'addRemoveFragment' aufzurufen, nachdem Sie das Fragment – Ricardo

+0

hinzugefügt haben. Sie können ein BridgeFragment (fügen Sie es im Adapter von viewpager), das nur ein frameLayout enthält, durch das Fragment ersetzen dass Sie wollen –

+0

Bitte führen Sie mehr und schreiben Sie Beispielcode. Vielen Dank . –

Antwort

0

In diesem Fall notifyDataSetChanged() wird nicht funktionieren Sie haben wieder den ganzen Adapter setzen und die letzten offenen Posten

@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' Direkt wie in 'addRemoveFragment()'

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

@ Burhanuddin Rashid. Nicht funktioniert . –

+0

Überprüfen Sie meine aktualisierte Antwort –

+0

Hmmmm. Nicht funktioniert. –

Verwandte Themen