java - 在 TabLayout + ViewPager2 中选择第三页作为默认值

标签 java android

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

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/

相关文章:

java - 从 Android Java 和 PHP REST API 解析 JSON 的异常

java - 如何从 Java 应用程序中与 C 控制台应用程序交互

android - 如何在android中连接/组合两个位图并使它们成为一张图像

android - 如何在android中使用html href中给出的数据

android - CSS固定位置导致软键盘出现在android中的文本框上

java - 尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add”

java - 从 Eclipse 插件使用 Jython

java - Switch 语句和字符串到字节

java - @Inject 在 java EE 中给出 NullPointer 异常

android - 由于新的安全性,Catalina 升级后无法使用旧的 NDK (android-ndk-r17c)