java - 切换活动后碎片活动消失
问题描述
我的导航抽屉有 6 个片段片段,其中一个包含我用于 viewPager 的 2 个其他片段。我的问题是,当我从包含 viewPager(HomeFragment) 的片段切换到另一个片段并切换回来时,HomeFragment 中两个片段的内容都会消失。
这是我的代码
MainActivity.class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
...
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
toolbar.setTitle("mSeries");
toolbar.setTitleTextColor(getResources().getColor(R.color.colorPrimaryDark));
break;
...
HomeFragment.class
public class HomeFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewPager viewPager = view.findViewById(R.id.viewpager);
setupViewPager(viewPager);
TabLayout tabLayout = view.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
adapter.addFragment(new UpcomingShowsActivity(), "Upcoming episodes");
adapter.addFragment(new UnwatchedEpisodesActivity(), "Unwatched episodes");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@NonNull
@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);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
即将到来的ShowsActivity.class
public class UpcomingShowsActivity extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_upcoming_episodes, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
我是android的新手,如果有更好或更有效的方法来实现这一点,请告诉我。
谢谢你的时间。
解决方案
我自己修复了它,我发布这个以防将来有人遇到类似问题
因为我在另一个片段中制作片段,所以我应该使用getChildFragmentManager
而不是getFragmentManager
在我的 HomeFragment.class中获取
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFragment(new UpcomingShowsActivity(), "Upcoming episodes");
adapter.addFragment(new UnwatchedEpisodesActivity(), "Unwatched episodes");
viewPager.setAdapter(adapter);
}
推荐阅读
- c++ - 如何创建包含对象的向量?
- python - 使用 Google Colab 的免费 GPU 使用 CTRL 生成文本的 HuggingFace 变形金刚
- c# - 围绕播放器旋转时相机行为奇怪
- r - 如何在ggplot R中突出显示连接组的线?
- postgresql - MyBatis 是否支持 PostgreSQL 支持全范围的 JSONB 操作符(?、@> 等)
- r - 数据框计算列未正确计算
- amazon-web-services - 如何使用 aws-cognito 为“login”和“signin”突变创建解析器
- c - 需要以 2 的幂对齐内存,并在 C 中将程序中断对齐 2 * getpagesize() 的倍数
- mysql - MySQL + SSRS | 存储过程只返回一行
- python - 在 python 函数中获取 KeyError 消息