Android - Remove then add fragment from ViewPager?

匿名 (未验证) 提交于 2019-12-03 02:43:01

问题:

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 .

回答1:

In this case notifyDataSetChanged() won't work You have to set the whole adapter again and set the last open item

@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' Directly like in 'addRemoveFragment()'

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!