You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中TabLayout与ViewPager2及内嵌Fragment不显示问题求助

问题原因及解决方法

核心问题:重复加载布局导致配置失效

你在onCreateView中做了两次布局加载:

  1. 先通过inflater.inflate()加载布局并找到控件,完成了ViewPager2适配器设置、TabLayoutMediator绑定;
  2. 随后又通过FragmentProfileBinding.inflate()重新加载了一次布局,最终返回的是这次加载的根视图——之前对TabLayout和ViewPager2的所有配置都作用在第一个废弃的视图上,自然不会显示。

修正方案(使用视图绑定规范实现)

直接通过视图绑定获取控件并完成配置,避免重复加载:

public class ProfileFragment extends Fragment {

private FragmentProfileBinding binding;
private ProfileAdapter profileAdapter;
private final String[] titles = new String[] {"Personal", "Employment", "Education"};

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // 仅初始化一次视图绑定
    binding = FragmentProfileBinding.inflate(inflater, container, false);
    View root = binding.getRoot();

    // 通过binding直接获取控件,无需findViewById
    profileAdapter = new ProfileAdapter(getChildFragmentManager(), getLifecycle());
    binding.viewPager2.setAdapter(profileAdapter);

    // 绑定TabLayout与ViewPager2
    new TabLayoutMediator(binding.tabLayout, binding.viewPager2, (tab, position) -> {
        tab.setText(titles[position]);
    }).attach();

    return root;
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    binding = null; // 销毁视图时清空绑定,避免内存泄漏
}
}

额外检查点

  • 确认fragment_profile.xml中存在ID为tab_layout的TabLayout和view_pager2的ViewPager2,且它们的android:visibility属性为visible;
  • 确保PersonalFragment、EmploymentFragment、EducationFragment的布局和逻辑正常,否则ViewPager2的内容会为空,但TabLayout仍应显示;
  • 适配器的FragmentManager选择:在Fragment中嵌套子Fragment时,必须使用getChildFragmentManager()而非getParentFragmentManager(),否则会导致子Fragment生命周期异常。

内容的提问来源于stack exchange,提问作者Avocado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:06:40