Android ViewPager未与TableLayout同步
我有一个显示第n个项目的ViewPager和TableLayout。选项卡中填充了正确的页面标题,并且ViewPager包含的片段显示了正确的精细度,但所选选项卡未与ViewPager当前项目同步 所选选项卡位置比viewpager当前项目的位置小1。这是Viewpager适配器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
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;