Android - 删除然后从ViewPager添加片段?
我有一个ViewPager
两页如何从ViewPager
中删除Fragment
之一,并将另一个Fragment
添加到ViewPager
?Android - 删除然后从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
。
在这种情况下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);
}
@ Burhanuddin拉希德。没有工作。 –
查看我的更新回答 –
嗯。没有工作。 –
尝试从addRemoveFragment方法内调用'notifyDataSetChanged()',在添加片段之后 – Ricardo
您可以创建一个BridgeFragment(将其添加到viewpager的适配器中),只包含一个frameLayout并将其替换为片段你想要 –
请指导更多并写出示例代码。谢谢 。 –