首页 > 解决方案 > 在 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 和 ViewPager2。一直以来,第一个选项卡都是默认的。谁能建议如何将我的第三个标签设为默认?谢谢

标签: javaandroid

解决方案


我有同样的问题,看起来viewPager2有问题,如果你在添加附加TabLayoutMediator(使用setCurrentItem)后立即设置选项卡,它有一个奇怪的行为,选择选项卡但不更新页面视图页面。

但是,如果您稍后执行此操作,在按钮中或几秒钟后调用该方法viewPager.setCurrentItem(2)可以正常工作,在可能的情况下,因为我必须知道我必须去哪个选项卡,所以我要求我的 viewModel 告诉我必须使用选项卡显示并且当观察者是 nofity 时,选项卡正在正确更改。

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

使用常规 viewPager 可以正常工作。


推荐阅读