[英]How to replace the content of one fragment with another in TabsLayout?
我使用带有两个选项卡的 tablayout。 每个选项卡都有一个 viewpager 片段。 代码:
ALoginFragment AFragment = new ALoginFragment();
BLoginFragment BFragment = new BLoginFragment();
SectionsPageAdapter sectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
sectionsPageAdapter.addFragment(AFragment, "A");
sectionsPageAdapter.addFragment(BFragment, "B");
viewPager.setAdapter(sectionsPageAdapter);
tabLayout.setupWithViewPager(viewPager);
SectionsPageAdapter
是我的自定义部分页面适配器。 代码:
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public SectionsPageAdapter(FragmentManager fragmentManager) {
super(fragmentManager,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
当我单击片段A
中的某个按钮时,我想用选项卡C
替换选项卡A
的内容。 我试过;
getChildFragmentManager().beginTransaction().replace(fragmentView.getId(), new CLoginFragment())
.addToBackStack(null).commit();
在A
的onCreateView
方法中保存fragmentView
的位置。 但出于某种原因, fragmentView.getId()
为-1
。 如何用C
替换A
的内容?
要替换 viewpager 中的片段,请将此 function 放入SectionsPageAdapter
public void replaceFragment(int position,Fragment newFragment ){
mFragmentList.set(position, newFragment);
notifyDataSetChanged();
}
然后用需要更改的片段的 position 和 newFragment 调用它
sectionsPageAdapter.replaceFragment(0,new CFragment());// replace ALoginFragment which is at zero index with CFragment
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.