android - ViewPager2 滑动选项卡布局不显示片段名称
问题描述
我正在尝试使用新的 ViewPager2 小部件在基于 java 的 android 应用程序中实现 tablayout。我的代码运行良好,但不显示选项卡文本。日志告诉我,我的函数实际上为每个选项卡设置了正确的名称。
这是我的活动中的函数,我希望在其中显示选项卡布局:
private void setUpViewPagerNew(){
String[] fragment_names = {"Gallery", "Photo"};
mViewPager2 = (ViewPager2) findViewById(R.id.container2);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_viewpager2);
SectionsPagerAdapterNew sectionsPagerAdapterNew = new SectionsPagerAdapterNew(this);
sectionsPagerAdapterNew.addFragment(new GalleryFragment());
sectionsPagerAdapterNew.addFragment(new PhotoFragment());
mViewPager2.setAdapter(sectionsPagerAdapterNew);
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(
tabLayout, mViewPager2, (tab, position) -> {
tab.setText(fragment_names[position]);
Log.d(TAG, "setUpViewPagerNew: TAB: " + tab);
Log.d(TAG, "setUpViewPagerNew: POSITION: " + position);
Log.d(TAG, "setUpViewPagerNew: GET TEXT: " + tab.getText());
});
tabLayoutMediator.attach();
}
这是我的 FragmentStateAdapter 助手类:
public class SectionsPagerAdapterNew extends FragmentStateAdapter {
private static final String TAG = "SectionsPagerAdapter";
private final List<Fragment> mFragmentList = new ArrayList<>();
public SectionsPagerAdapterNew(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
public SectionsPagerAdapterNew(@NonNull Fragment fragment) {
super(fragment);
}
public SectionsPagerAdapterNew(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return mFragmentList.get(position);
}
@Override
public int getItemCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment){
mFragmentList.add(fragment);
}
}
这是我的 ViewPager 布局文件:
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tab_layout_viewpager2"
android:background="@color/red"
app:tabSelectedTextColor="@color/light_blue">
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container2">
</androidx.viewpager2.widget.ViewPager2>
</RelativeLayout>
</merge>
最后但并非最不重要的是日志输出:
setUpViewPagerNew: TAB: com.google.android.material.tabs.TabLayout$Tab@37a259f
setUpViewPagerNew: POSITION: 0
setUpViewPagerNew: GET TEXT: Gallery
setUpViewPagerNew: TAB: com.google.android.material.tabs.TabLayout$Tab@a72a6ec
setUpViewPagerNew: POSITION: 1
setUpViewPagerNew: GET TEXT: Photo
谢谢你的帮助!
解决方案
我终于发现了我的失败。请注意为 TabLayoutMediator 设置正确的选项卡布局 ID。
推荐阅读
- image - 在颤动中显示带有网格视图的图像
- git - 何在 git 存储库中获取 PR 流程
- docker - 无法远程登录到 MariaDB 容器
- azure - 使用 terraform 和 arm 模板通过工作流部署逻辑应用程序的最佳方法?
- html - 如何使事件标题出现在多行完整日历版本 5(资源时间线视图)
- azure - Azure Web App webconfig“虚拟应用程序和目录”
- wordpress - 使用 Google Maps Api 在点击事件上显示 2 点之间的方向
- oauth - 在公共应用程序上使用 Gmail API(基于 oauth)会花钱吗?
- r - 如何在 R 中添加和重新排列 XML 文件的节点?
- azure - 通过 Rest API 访问事件网格管理