私はViewPager
に2ページありますFragment
のいずれかをViewPager
から削除して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
を追加する必要があります。
フラグメントを追加した後に、メソッド 'addRemoveFragment'の中から' notifyDataSetChanged() 'を呼び出すことを試みてください。 – Ricardo
frameLayoutだけを含むBridgeFragmentを作成してフラグメントに置き換えることができますあなたはほしいと思う –
サンプルコードを書いてください。ありがとう。 –