java - 这个 setupWithViewPager 错误有什么解决方案吗?
问题描述
自昨晚以来,我一直在对此进行故障排除,我使用了 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);
}```
解决方案
最后,您必须更新将 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()
(在 的情况下)创建Fragment的新实例FragmentStateAdapter
。