#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
).