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

Android开发:如何正确获取Tabbed Activity当前Tab编号并传值

正确获取当前Tab编号并传递到新Activity的方法

嘿,我明白你遇到的问题了——FragmentPagerAdapter的getItem()方法其实会提前预加载相邻的Fragment(默认预加载左右各一个),所以你在那里赋值的position_fragment最后拿到的往往不是当前显示的Tab位置,而是最后被创建的那个Fragment的位置,这就导致传递的编号不正确。

下面给你两种可靠的解决方式:

方法一:直接使用ViewPager的getCurrentItem()(最简单)

ViewPager本身就实时追踪着当前活跃的页面,所以直接调用它的getCurrentItem()方法就能拿到准确的当前Tab编号。修改你的FAB点击事件代码即可:

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent startNewPostActivity = new Intent(getApplicationContext(), NewPostActivity.class);
        // 获取当前显示的Tab位置
        int currentTabIndex = mViewPager.getCurrentItem();
        startNewPostActivity.putExtra("Fragment_Position", currentTabIndex);
        startActivity(startNewPostActivity);
    }
});

这种方式不需要额外维护变量,直接从ViewPager获取实时的当前页面位置,完全避开了Fragment预加载带来的问题。

方法二:监听ViewPager页面切换事件(适合需要全局使用当前Tab位置的场景)

如果你需要在多个地方用到当前Tab的位置,可以给ViewPager添加页面切换监听,实时更新一个全局变量:

  1. 先在Activity里声明一个变量:
private int currentTabPosition = 0; // 默认初始位置为0
  1. 在onCreate()方法里添加ViewPager的页面切换监听:
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        // 页面切换时更新当前Tab位置
        currentTabPosition = position;
    }
});
  1. 然后在FAB点击事件里使用这个变量:
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent startNewPostActivity = new Intent(getApplicationContext(), NewPostActivity.class);
        startNewPostActivity.putExtra("Fragment_Position", currentTabPosition);
        startActivity(startNewPostActivity);
    }
});

最后记得删除你之前在SectionsPagerAdapter.getItem()里给position_fragment赋值的代码,那个方法的调用时机和当前显示的页面没有直接关联,预加载机制会导致它返回的位置不准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:22