есть ли какое-либо решение для этой ошибки setupWithViewPager?

#java #android #android-studio #android-viewpager #android-tablayout

#java #Android #android-studio #android-viewpager #android-tablayout

Вопрос:

Я устранял эту проблему со вчерашнего вечера, я использовал viewpager2, потому что исходный viewpager внутри androidstudio отсутствует. Я не знаю, что вызывает ошибку, ребята, вы можете мне помочь?

     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);

    }```
  

Ответ №1:

Из интерфейсов рефакторинга таблиц:

Наконец, необходимо обновить код, который присоединяет объект TabLayout к объекту ViewPager. Хотя TabLayout использует свой собственный метод setupWithViewPager() для интеграции с ViewPager, для интеграции с ViewPager2 требуется экземпляр TabLayoutMediator.

Для работы с 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();
  

Кроме того, вы никогда не должны передавать фактические экземпляры фрагментов в FragmentPagerAdapter. Вы всегда должны создавать новый экземпляр фрагмента внутри getItem() (в случае FragmentPagerAdapter / FragmentStatePagerAdapter ), а также внутри createFragment() (в случае FragmentStateAdapter ).