我试图将第三个选项卡设置为默认选项卡,但下面的代码不起作用:
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 和 ViewPager2。第一个选项卡始终是默认的。 谁能建议如何将我的选项卡的第三个设置为默认值? 谢谢
最佳答案
我遇到了同样的问题,看起来 viewPager2 有问题,如果您在添加附加 TabLayoutMediator (使用 setCurrentItem)后立即设置选项卡,它会出现奇怪的行为,选择选项卡但不更新viewPager 的页面。
但是如果您稍后执行此操作,在按钮中或几秒钟后调用方法 viewPager.setCurrentItem(2)
效果很好,在可能的情况下,因为我必须知道我要转到哪个选项卡我要求我的 viewModel 告诉我必须显示的选项卡,并且当观察者不知道时,选项卡正在正确更改。
至少对我来说这是可行的,但我可以看到第一个选项卡加载(默认选项卡 0),然后选项卡更改为我选择的选项卡,因为这对我来说不可行,所以我更改为使用 viewPager (而不是viewPager2) 并照常将其设置为 tabLayout,tab_layout.setupWithViewPager(view_pager)
。
使用常规 viewPager 效果很好。
关于java - 在 TabLayout + ViewPager2 中选择第三页作为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61717601/