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

如何在TabLayout的Tab中打开Fragment?我的Activity含TabLayout与ViewPager

实现TabLayout+ViewPager对应Tab加载Fragment的方案

嘿,我来帮你搞定TabLayout和ViewPager联动加载Fragment的事儿!这是Android开发里超常见的场景,步骤清晰得很,我给你一步步拆解:

1. 先准备两个Fragment类

你需要为两个Tab分别创建对应的Fragment,比如FragmentOne和FragmentTwo,每个Fragment可以有自己的布局和业务逻辑。举个最简单的示例:

public class FragmentOne extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, 
                            @Nullable ViewGroup container, 
                            @Nullable Bundle savedInstanceState) {
        // 加载Fragment的布局文件,记得先创建好对应的xml哦
        return inflater.inflate(R.layout.fragment_one, container, false);
    }
}

FragmentTwo的写法和上面几乎一致,只需要替换布局文件即可。

2. 创建ViewPager的适配器

接下来要写一个适配器,用来把Fragment和ViewPager绑定起来,同时给TabLayout提供标题。推荐用FragmentPagerAdapter(如果你的Fragment不需要频繁销毁重建,这个就很合适):

public class MyPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> tabTitleList = new ArrayList<>();

    public MyPagerAdapter(FragmentManager fm) {
        // BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 是AndroidX新增的,能优化Fragment的生命周期
        super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
    }

    // 用来添加Fragment和对应Tab标题的方法
    public void addFragment(Fragment fragment, String tabTitle) {
        fragmentList.add(fragment);
        tabTitleList.add(tabTitle);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        // 返回对应位置的Fragment
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        // 返回Fragment的总数
        return fragmentList.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        // 返回对应Tab的标题
        return tabTitleList.get(position);
    }
}

3. 在Activity中完成联动配置

这一步是核心,把TabLayout、ViewPager和适配器三者绑定起来,在Activity的onCreate方法里写:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout); // 替换成你自己的Activity布局文件名

    // 从布局中获取控件实例
    TabLayout tabLayout = findViewById(R.id.tab_layout);
    ViewPager viewPager = findViewById(R.id.view_pager);

    // 初始化适配器并添加Fragment和标题
    MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new FragmentOne(), "第一个Tab");
    adapter.addFragment(new FragmentTwo(), "第二个Tab");

    // 给ViewPager设置适配器
    viewPager.setAdapter(adapter);
    // 关键一步:让TabLayout和ViewPager联动起来,点击Tab会切换ViewPager,滑动ViewPager也会切换Tab
    tabLayout.setupWithViewPager(viewPager);
}

4. 检查你的布局文件

确保你的Activity布局里已经正确添加了TabLayout和ViewPager,比如补充布局里的关键部分:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- TabLayout -->
    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"/>

    <!-- ViewPager -->
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/tab_layout"/>

</FrameLayout>

小提示

  • 如果你用的是AndroidX库,记得确保你的依赖里包含了com.google.android.material:material和androidx.viewpager:viewpager哦。
  • 如果你的Fragment需要处理复杂的生命周期或者需要频繁切换销毁,建议改用FragmentStatePagerAdapter,用法和上面几乎一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:56