-1

我有一个ViewPager两页如何从ViewPager中删除Fragment之一,并将另一个Fragment添加到ViewPagerAndroid - 删除然后从ViewPager添加片段?

我写了下面的代码,但不工作:

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

在这里,我需要删除特定Fragment并添加另一个Fragment

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

} 

在这里,我需要从位置0删除WorkTableFragment和位置0 LoggedInFragment

+0

尝试从addRemoveFragment方法内调用'notifyDataSetChanged()',在添加片段之后 – Ricardo

+0

您可以创建一个BridgeFragment(将其添加到viewpager的适配器中),只包含一个frameLayout并将其替换为片段你想要 –

+0

请指导更多并写出示例代码。谢谢 。 –

回答

0

在这种情况下notifyDataSetChanged()行不通 你必须重新设置整个适配器以及上次打开的项目

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

} 

设置“LoggedInFrament”一样,直接在“addRemoveFragment()”

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

@ Burhanuddin拉希德。没有工作。 –

+0

查看我的更新回答 –

+0

嗯。没有工作。 –