在TabLayout+ViewPager2中选择第三页作为默认页面



我试图将第三个选项卡设为默认选项卡,但下面的代码不起作用:

public class MessagesFragment extends Fragment {
private FragmentsAdapter fragmentsAdapter;
private ViewPager2 viewPager;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_messages, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
fragmentsAdapter = new FragmentsAdapter(this);
viewPager = view.findViewById(R.id.pager);
viewPager.setAdapter(fragmentsAdapter);
viewPager.setCurrentItem(2);
TabLayout tabLayout = view.findViewById(R.id.tab_layout);
TabLayoutMediator.TabConfigurationStrategy tabConfigurationStrategy = new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
switch (position) {
case FragmentsAdapter.MESSAGES_NEW:
tab.setText(R.string.navMessagesNew);
break;
case FragmentsAdapter.MESSAGES_READ:
tab.setText(R.string.navMessagesRead);
break;
case FragmentsAdapter.SETTINGS:
tab.setText(R.string.navSettings);
break;
default:
throw new IllegalArgumentException("There is no fragment for that position = " + position);
}
}
};
new TabLayoutMediator(tabLayout, viewPager, tabConfigurationStrategy).attach();
}
}

我使用的是TabLayout和ViewPage2。一直以来,第一个选项卡都是默认的。有人能建议如何将我的账单的三分之一作为默认值吗?感谢

我也遇到了同样的问题,看起来viewPager2有问题,如果你在添加TabLayoutMediator(使用setCurrentItem(时立即设置选项卡,它会有一个奇怪的行为,选择选项卡但不更新viewPager的页面。

但是,如果稍后再这样做,只需一个按钮或几秒钟后调用方法viewPager.setCurrentItem(2)就可以正常工作,在这种情况下,由于我必须知道我必须去哪个选项卡,我要求我的viewModel告诉我必须显示哪个选项卡,当观察者不在场时,选项卡正在正确更改。

至少对我来说,这是可行的,但我可以看到第一个选项卡加载(deault选项卡0(,然后是我选择的选项卡的更改,因为这对我来说不可行,我改为使用viewPager(而不是viewPager2(,并将其设置为tabLayout,如往常一样,tab_layout.setupWithViewPager(view_pager)

对于常规视图,Pager运行良好。

您的代码是正确的:

  • viewPager.setCurrentItem(2(
  • viewPager.setCurrentItem(2,false(
  • tabLayout.getTabAt(2(.select((
  • tabLayout.selectTab(tabLayout.getTabAt(2((

这些都是

viewPager.setCurrentItem(2)

修改为

viewPager.t.post {
viewPager.setCurrentItem(2, true)
}

最新更新