Android ViewPager未与TableLayout同步

Android ViewPager未与TableLayout同步,android,android-fragments,android-viewpager,android-tabhost,Android,Android Fragments,Android Viewpager,Android Tabhost,我有一个显示第n个项目的ViewPager和TableLayout。选项卡中填充了正确的页面标题,并且ViewPager包含的片段显示了正确的精细度,但所选选项卡未与ViewPager当前项目同步 所选选项卡位置比viewpager当前项目的位置小1。这是Viewpager适配器 public class ViewPagerAdapter extends FragmentStatePagerAdapter { public ViewPagerAdapter(FragmentMa

我有一个显示第n个项目的ViewPager和TableLayout。选项卡中填充了正确的页面标题,并且ViewPager包含的片段显示了正确的精细度,但所选选项卡未与ViewPager当前项目同步

所选选项卡位置比viewpager当前项目的位置小1。这是Viewpager适配器

 public class ViewPagerAdapter extends FragmentStatePagerAdapter {
        public ViewPagerAdapter(FragmentManager fm){
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Recipe selectedRecipe = getRecipeList().get(position);
            return RecipeDetailFragment.newInstance(selectedRecipe.getId);
        }

        @Override
        public int getCount() {
            return .getRecipeList().size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            Recipe selectedRecipe = .getRecipeList().get(position);
            String title = selectedRecipe.getTitle();                
            return title ;
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }   

    }
下面是我如何设置ViewPager的

private void setupViewPager() {
       ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}

下面是输出的样子

编辑1: 我认为问题与如何调用ViewPager的getItem方法有关,下面是10项左右滚动的日志

在您可以使用的片段中不使用静态变量, 片段中的公共函数如下所示

而不是这个

    @Override
    public Fragment getItem(int position) {
        Recipe selectedRecipe = getRecipeList().get(position);
        return RecipeDetailFragment.newInstance(selectedRecipe.getId);
    }
在片段中添加公共函数

  public void setData(int id){
   this.id= id;
  }  

最后,这是我如何将ViewPager所选项目与Tablayout selected选项卡同步的

void selectPage(final int pageIndex){
        new Handler().postDelayed(
                new Runnable() {
                    @Override public void run() {
                        tabLayout.setSmoothScrollingEnabled(true);
                        tabLayout.setScrollPosition(pageIndex, 0f, true);
                    }
                }, 100);
    }
然后我从两个地方调用了这个方法,首先是在设置Viewpager时

 recipePosition = getIntent().getIntExtra(Constants.RECIPE_POSITION, 0);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        if (recipePosition > 0){
            recipePosition--;
        }
        viewPager.setCurrentItem(recipePosition,true);
        selectPage(recipePosition);
然后是setItem中的第二个

Recipe selectedRecipe = getRecipeList().get(position);
RecipeDetailFragment receiptFRagment= new ReceiptFragment();
receiptFragment.setData(selectedRecipe.getId);
selectPage(position);
return receiptFragment;

它的作品,我仍然无法理解为什么这些都没有同步默认

检查视图中的数据页面数据是否正确显示,两者都引用了相同的阵列。我仍然认为列表数据不正确。。否则一切看起来都很好谢谢,我只是再次验证数据是非常正确的。选项卡布局位置在Viewpager后面。请发布您的数据字符串。谢谢,我删除了静态片段工厂方法,仍然有相同的经验。我认为getItem导致了这个问题。我已经添加了一个getitem logyou附加图像的屏幕截图,使您的问题不清楚。你能详细说明一下吗?当我创建Viewpager时,会使用位置1然后0调用getItem。如果我向右滑动,它会移动到位置2,然后3,4到10。如果向右滑动,则从位置10移动到位置8。
Recipe selectedRecipe = getRecipeList().get(position);
RecipeDetailFragment receiptFRagment= new ReceiptFragment();
receiptFragment.setData(selectedRecipe.getId);
selectPage(position);
return receiptFragment;