【问题标题】:is there any solution for this setupWithViewPager error?这个 setupWithViewPager 错误有什么解决方案吗?
【发布时间】:2021-01-22 02:03:13
【问题描述】:

我从昨晚开始就一直在解决这个问题,我使用了 viewpager2,因为 androidstudio 中的原始 viewpager 丢失了。我不知道是什么导致了错误,你们能帮帮我吗?

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        myRef = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());

        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Users users = snapshot.getValue(Users.class);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
        //TabLayout and viewpager
        TableLayout tabLayout = findViewById(R.id.tabLayout);
        ViewPager viewPager = findViewById(R.id.view_pager);

        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

        viewPagerAdapter.addFragment(new ChatFragment(), "chats" ); // this line can crash
        viewPagerAdapter.addFragment(new UsersFragment(), "Users" ); // this line can crash

        viewPager.setAdapter(viewPagerAdapter);

        tabLayout.setupWithViewPager(viewPager);

    }```

【问题讨论】:

    标签: java android android-studio android-viewpager android-tablayout


    【解决方案1】:

    来自Refactor TabLayout interfaces

    最后,您必须更新附加 TabLayout 对象的代码 到 ViewPager 对象。而 TabLayout 使用自己的 setupWithViewPager() 方法与 ViewPager 集成,它需要一个 TabLayoutMediator 实例与 ViewPager2 集成。

    要使用 ViewPager2,您不能再使用 setupWithViewPager 方法,而必须使用 TabLayoutMediator。

    // TODO: Comment-out or remove this line
    // tabLayout.setupWithViewPager(viewPager);
    
    new TabLayoutMediator(tabLayout, viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
        @Override
        public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
            String tabTitle = "";
            if (position == 0) {
                tabTitle = "chats";
            } else if (position == 1) {
                tabTitle = "Users";
            }
            tab.setText(tabTitle);
        }
    }).attach();
    

    此外,您应该永远不要将实际的 Fragment 实例传递给 FragmentPagerAdapter。您应该始终在 getItem()(在 FragmentPagerAdapter/FragmentStatePagerAdapter 的情况下)和 createFragment()(在 FragmentStateAdapter 的情况下)内创建 Fragment 的新实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2021-02-26
      • 2021-10-14
      • 2021-03-11
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多